5031. 【NOI2017模拟3.27】B

Description

Input

Output

Sample Input

2
6 2
2 3 3 3 3 3
23 3
2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

Sample Output

2 7 7 15 7 23
2 9 9 24 9 39 9 50 24 39 9 102 9 39 39 90 9 102 9 102 39 39 9

Data Constraint


f的范围为0到10^9+7-1

Solution

其中1表示在定义域中所有函数值(值域)都为1的函数。(即数组中每个位置都为1)

对于最后一个,可以看成:

g(i)=\sum_{i_1|i}\sum_{i_2|i_1}...\sum_{i_{k-1}|i_{k-2}}\sum_{d|i_{k-1}}f(d)*1(\frac{i_{k-1}}{d})

因为根据狄利克雷卷积的形式:

(f*1)(i_{k-1})=\sum_{d|i_{k-1}}f(d)*1(\frac{i_{k-1}}{d})

(f卷1)的函数的第ik-1项等价于后面的式子

所以有:

g(i)=\sum_{i_1|i}\sum_{i_2|i_1}...\sum_{i_{k-1}|i_{k-2}}(f*1)(i_{k-1})

g(i)=\sum_{i_1|i}\sum_{i_2|i_1}...\sum_{d|i_{k-2}}(f*1)(d)

g(i)=\sum_{i_1|i}\sum_{i_2|i_1}...\sum_{d|i_{k-2}}(f*1)(d)*1(\frac{i_{k-2}}{d})

g(i)=\sum_{i_1|i}\sum_{i_2|i_1}...\sum_{i_{k-2}|i_{k-3}}(f*1*1)(i_{k-2})

...

g(i)=\sum_{i_1|i}(f*1^{k-1})(i_1)

g(i)=(f*1^k)(i)

因此用狄利克雷卷积套上快速幂直接同时求解出所有g数组的值。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define I int
#define ll long long
#define F(i,a,b) for(I i=a;i<=b;i++)
#define Fd(i,a,b) for(I i=a;i>=b;i--)
#define N 100010
#define M 1000000007
using namespace std;
I T,n,k,tot;
ll f[N],g[N],t[N],now[N];
void R(I &x){
	x=0;char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
}
I main(){
	freopen("b.in","r",stdin);
	freopen("b.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&k);
		F(i,1,n) scanf("%lld",&f[i]);
		F(i,1,n) t[i]=g[i]=1ll;
		tot=0;
		while(k){
			if(k&1){
				tot++;
				if(tot==1){F(i,1,n) g[i]=t[i];}
				else{
					F(i,1,n) now[i]=0;
					F(i,1,n){
						F(j,1,n/i) now[i*j]=(now[i*j]+g[i]*t[j]%M)%M;
					}
					F(i,1,n) g[i]=now[i];
				}
			}
			F(i,1,n) now[i]=0;
			F(i,1,n){
				F(j,1,n/i) now[i*j]=(now[i*j]+t[i]*t[j]%M)%M;
			}
			F(i,1,n) t[i]=now[i];
			k>>=1;
		}
		F(i,1,n) now[i]=0;
		F(i,1,n){
			F(j,1,n/i) now[i*j]=(now[i*j]+f[i]*g[j]%M)%M;
		}
		F(i,1,n) printf("%d ",now[i]);
		printf("\n");
	}
	return 0;
}
//

猜你喜欢

转载自blog.csdn.net/zsjzliziyang/article/details/107749446
今日推荐