Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define ll long long
- template<typename T>
- inline void read(T&x){
- x=0;T k=1;char gc;
- while(!isdigit(c)){if(c=='-')k=-1;gc;}
- while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
- }
- const int N=100005;
- const int p=1e9+7;
- inline int add(int a,int b){
- return (a+=b)>=p?a-p:a;
- }
- int tmp[N];
- inline int mul(int *A,int *B,int *C,int n){
- memset(tmp+1,0,n<<2);
- for(int i=1;i<=n;++i){
- for(int j=1;i*j<=n;++j){
- tmp[i*j]=add(tmp[i*j],(ll)A[i]*B[j]%p);
- }
- }
- memcpy(C+1,tmp+1,n<<2);
- }
- int Ans[N];
- inline void qpow(int *A,int *B,int k,int n){
- memset(Ans+1,0,n<<2);
- Ans[1]=1;
- while(k){
- if(k&1)mul(A,Ans,Ans,n);
- mul(A,A,A,n);
- k>>=1;
- }
- memcpy(B+1,Ans+1,n<<2);
- }
- int f[N];
- int g[N];
- int main(){
- // freopen("mex.in","r",stdin);
- // freopen("mex.out","w",stdout);
- int T;r(T);
- while(T--){
- int n,k;r(n),r(k);
- for(int i=1;i<=n;++i){
- r(f[i]);
- g[i]=1;
- }
- qpow(g,g,k,n);
- mul(f,g,f,n);
- for(int i=1;i<=n;++i){
- printf("%d",f[i]);
- putchar(i==n?'\n':' ');
- }
- }
- }
Add Comment
Please, Sign In to add comment