题意:略。

思路:网上是用卷积或者做的,不太会。 因为上一题莫比乌斯有个类似的部分,所以想到了每个素因子单独考虑。

我们用C(x^p)表示p次减少分布在K次减少里的方案数,由隔板法可知,C(x^p)=C(K+p-1,K-1);  而且满足C(x)有积性,即gcd(x,y)==1时,有C(x*y)=C(x)*C(y);

所以C数组可以线性筛。 把筛素数的线性筛,稍微改一下即可,low[i]代表的是i的最小素数因子x的p次方,即x^p|i,p最大,num[i]代表的是幂次p。

那么g(x)=Σ f(a)*C(x/a); g数组也可以线性筛。这里相当于手动卷积。

所以C和g函数分别线性筛即可。

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
using namespace std;
const int maxn=;
const int Mod=1e9+;
int rev[maxn],f[maxn],ans[maxn],jc[maxn],fz[maxn],p[maxn];
int vis[maxn],low[maxn],num[maxn],C[maxn],cnt,N,K;
int qpow(int a,int x){
int res=; while(x){
if(x&) res=(ll)res*a%Mod;
a=(ll)a*a%Mod; x>>=;
} return res;
}
void getC()
{
cnt=; rep(i,,maxn) low[i]=num[i]=;
for(int i=;i<maxn;i++){
if(!vis[i]) p[++cnt]=i,low[i]=i,num[i]=;
for(int j=;j<=cnt&&i*p[j]<maxn;j++){
vis[i*p[j]]=;
if(i%p[j]==){
low[i*p[j]]=low[i]*p[j];
num[i*p[j]]=num[i]+;
break;
}
low[i*p[j]]=p[j];
num[i*p[j]]=;
}
}
}
int main()
{
jc[]=;rep(i,,maxn-) jc[i]=(ll)jc[i-]*i%Mod;
rev[maxn-]=qpow(jc[maxn-],Mod-);
for(int i=maxn-;i>=;i--) rev[i]=(ll)rev[i+]*(i+)%Mod;
getC();
int T; scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&K);
fz[]=; rep(i,,N) fz[i]=(ll)fz[i-]*(i+K-)%Mod,ans[i]=;
rep(i,,N) scanf("%d",&f[i]);
C[]=;
rep(i,,N) C[i]=(ll)C[i/low[i]]*rev[num[i]]%Mod*fz[num[i]]%Mod;
for(int i=;i<=N;i++){
for(int j=i;j<=N;j+=i)
(ans[j]+=(ll)f[i]*C[j/i]%Mod)%=Mod;
}
rep(i,,N-) printf("%d ",ans[i]);
printf("%d\n",ans[N]);
}
return ;
}

到此,引申一下有个题,给定N<1e7,K<1e9,求1^K+2^K+3^+...N^K。

这里由于K过大,显然不能用拉格朗日插值法。 我们用线性筛来做,如果i是素数,我们就快速幂求f[i]=i^K,否则就用之前的结果就好了,即f[i]=f[low[i]]^f[i/low[i]];

由于素数的个数大约=N/lgN; 而快速幂的复杂度是lgK。所以整个算法差不多是线性的。

HDU - 5628:Clarke and math (组合数&线性筛||迪利克雷卷积)的更多相关文章

  1. HDU 5628 Clarke and math——卷积,dp,组合

    HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...

  2. HDU 5628 Clarke and math dp+数学

    Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...

  3. HDU 5628 Clarke and math Dirichlet卷积+快速幂

    题意:bc round 72 中文题面 分析(官方题解): 如果学过Dirichlet卷积的话知道这玩意就是g(n)=(f*1^k)(n), 由于有结合律,所以我们快速幂一下1^k就行了. 当然,强行 ...

  4. HDU.5628.Clarke and math(狄利克雷卷积 快速幂)

    \(Description\) \[g(i)=\sum_{i_1|i}\sum_{i_2|i_1}\sum_{i_3|i_2}\cdots\sum_{i_k|i_{k-1}}f(i_k)\ mod\ ...

  5. bzoj 3309 DZY Loves Math——反演+线性筛

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3309 像这种数据范围,一般是线性预处理,每个询问 sqrt (数论分块)做. 先反演一番.然 ...

  6. hdu 5648 DZY Loves Math 组合数+深搜(子集法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5648 题意:给定n,m(1<= n,m <= 15,000),求Σgcd(i|j,i&am ...

  7. bzoj 3560 DZY Loves Math V - 线性筛 - 扩展欧几里得算法

    给定n个正整数a1,a2,…,an,求 的值(答案模10^9+7). Input 第一行一个正整数n. 接下来n行,每行一个正整数,分别为a1,a2,…,an. Output 仅一行答案. Sampl ...

  8. 【HDU 6428】Calculate 莫比乌斯反演+线性筛

    题解 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 1LL&l ...

  9. 【BZOJ3309】DZY Loves Math(线性筛)

    题目: BZOJ 3309 分析: 首先,经过一番非常套路的莫比乌斯反演(实在懒得写了),我们得到: \[\sum_{T=1}^n \sum_{d|T}f(d)\mu(\frac{T}{d})\lfl ...

随机推荐

  1. hdu4310 - Hero - 简单的贪心

    2017-08-26  15:25:22 writer:pprp 题意描述: • 1 VS n对战,回合制(你打他们一下,需要受到他们所有存活人的攻击)• 你的血量无上限,攻击力为1• 对手血量及攻击 ...

  2. eclipse 打开 maven项目,出现红色的感叹号

    解决: 选中有感叹号的项目右键,用maven>>update project解决.[然后我再添加java system 类库就可以了]

  3. python collections deque

    collections是python的高级容器类库,包含了dict.truple之外的常用容器. 下面介绍常用的deque 1. deque是双端队列,可以从两端塞元素进去,也可以从两端取元素. 2. ...

  4. C#API函数

    API函数是构筑Windows应用程序的基石,是Windows编程的必备利器.每一种Windows应用程序开发工具都提供了间接或直接调用了Windows API函数的方法,或者是调用Windows A ...

  5. 关于MAC升级后,vim更新插件报错

    找不到路径: 直接在终端 terminal 输入: xcode-select --install

  6. Java线程池可用的队列

    Java线程池ThreadPoolExecutor的构造器: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long ...

  7. 网页上播放音频、视频Mp3,Mp4

    昨天在处理网页上播放音频mp3,视频mp4上用了一天的时间来比较各种方案,最终还是选择了HTML5的 标签,谷歌浏览器.IE浏览器对标签的支持都很好,火狐上需要安装quicktime插件,效果比较差. ...

  8. 【转】VIM 中设置Tab

    灵活操作 Vim 中的 Tabsgaleki post @ 2007年11月16日 05:07PM in Vim Tips with tags: vim tabs Vim 支持 Tabs,也就是标签页 ...

  9. Java获取未知类型对象的属性

    获取未知类型对象的属性通常有两种方式: 一是通过自定义注解的方式,通过获取被注解的属性从而获取属性的值,这种方式也是Spring参数注入的重要实现手段 二是通过反射获取属性的名称,通过属性名从而获取属 ...

  10. Linux运维学习第一天!

    第一步: 申请了一个腾讯的云主机!!!过程还是挺复杂的...配置有点低,满足初步学习需求就行啦(报了个培训班给送的,感觉不咋地道,太抠门) 服务器:北京 机型:标准型 镜像:公共镜像 系统:CentO ...