51Nod 1769 Clarke and math2


http://www.51nod.com/Challenge/Problem.html#!#problemId=1769

要算的是\(G=F*I^k\),考虑怎么求\(I^k\)

\(I^k(n=\prod_{i=1}^mp_i^{e_i})=\prod_{i=1}^mC_{e_i+k-1}^{e_i}\)

\(C_{e_i+k-1}^{e_i}\)显然可以直接求。

直接线性筛\(I^k\),然后卷\(F\)。

#include<bits/stdc++.h>
#define il inline
#define vd void
#define mod 1000000007
typedef long long ll;
il ll gi(){
ll x=0,f=1;
char ch=getchar();
while(!isdigit(ch))f^=ch=='-',ch=getchar();
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return f?x:-x;
}
il int pow(int x,int y){
int ret=1;
while(y){
if(y&1)ret=1ll*ret*x%mod;
x=1ll*x*x%mod;y>>=1;
}
return ret;
}
int f[500010];
char K[1000010];
int pr[500010],Ik[500010],p,_Ik[500010],d[500010],ans[500010];
bool yes[500010];
int Ck[30];
int main(){
#ifdef XZZSB
freopen("in.in","r",stdin);
freopen("out.out","w",stdout);
#endif
int n=gi(),k=0;scanf("%s",K+1);
int lenk=strlen(K+1);
for(int i=1;i<=lenk;++i)k=(k*10ll+K[i]-'0')%mod;
for(int i=1;i<=n;++i)f[i]=gi();
Ck[0]=1;
for(int i=1;i<30;++i){
Ck[i]=1;
for(int j=1;j<=i;++j)Ck[i]=1ll*Ck[i]*j%mod;
Ck[i]=pow(Ck[i],mod-2);
for(int j=1;j<=i;++j)Ck[i]=1ll*Ck[i]*(i+k-j)%mod;
}
Ik[1]=1;
for(int i=2;i<=n;++i){
if(!yes[i])pr[++p]=i,Ik[i]=Ck[1],_Ik[i]=1,d[i]=1;
for(int j=1;j<=p&&i*pr[j]<=n;++j){
yes[i*pr[j]]=1;
if(i%pr[j]==0){
Ik[i*pr[j]]=1ll*_Ik[i]*Ck[d[i]+1]%mod;
_Ik[i*pr[j]]=_Ik[i];
d[i*pr[j]]=d[i]+1;
break;
}
Ik[i*pr[j]]=1ll*Ik[i]*Ck[1]%mod;
_Ik[i*pr[j]]=Ik[i];
d[i*pr[j]]=1;
}
}
for(int i=1;i<=n;++i)
for(int j=i;j<=n;j+=i)
ans[j]=(ans[j]+1ll*Ik[i]*f[j/i])%mod;
for(int i=1;i<=n;++i)printf("%d ",ans[i]);
return 0;
}

51Nod 1769 Clarke and math2的更多相关文章

  1. 【51Nod 1769】Clarke and math2

    [51Nod 1769]Clarke and math2 题面 51Nod 题解 对于一个数论函数\(f\),\(\sum_{d|n}f(d)=(f\times 1)(n)\). 其实题目就是要求\( ...

  2. 【51Nod1769】Clarke and math2(数论,组合数学)

    [51Nod1769]Clarke and math2(数论,组合数学) 题面 51Nod 题解 考虑枚举一个\(i_k\),枚举一个\(i\),怎么计算\(i_k\)对\(i\)的贡献. 把\(\f ...

  3. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  4. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  5. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  6. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  7. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

  8. 【51Nod 1622】【算法马拉松 19C】集合对

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...

  9. 【51Nod 1616】【算法马拉松 19B】最小集合

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...

随机推荐

  1. [BZOJ3230]相似子串(后缀数组)

    显然可以通过后缀数组快速找到询问的两个串分别是什么,然后正反各建一个后缀数组来求两个串的LCP和LCS即可. #include<cstdio> #include<cstring> ...

  2. 论文笔记:DeepCF

    Abstract 推荐系统可以看作用户和物品的匹配问题,不过user以及item两者的语义空间差异太大,直接匹配不太符合实际.主流的改进CF的方法有两类:基于表示学习的CF方法以及基于函数学习的表示方 ...

  3. 解决打开IE报错“无法启动...丢失api-ms-win-core-path-l1-1-0.dll”的问题

    打开IE突然发现报错 试了各种方法都不行 最终看这篇文章,才解决:https://www.yijile.com/log/577.html 打开IE设置选项,选择管理加载项,如图讲该选项禁用,就不报错. ...

  4. Windows 创建 Redis 和 zookeeper 系统服务

    Redis 启动 Redis start cmd /k "cd/d c:\Redis-x64-3.2.100\&&echo start Redis &&red ...

  5. hexo更改主题

    github+hexo搭建好个人博客之后,一般都挑选自己喜欢的主题.在这里为大家介绍一下比如何挑选主题以及如何修改主题. 主题选择: 1:知乎推荐 2:hexo官方 本地目录中打开git bash: ...

  6. canvas实现酷炫气泡效果

    canvas实现动画主要是靠设置定时器(setinterval())和定时清除画布里的元素实现,canvas动画上手很简单,今天可以自己动手来实现一个酷炫气泡效果. 气泡炸裂效果(类似水面波纹) 代码 ...

  7. 初次尝试vue脚手架

    1.第一步首先安装NodeJs ,从nodejs 官网去down,然后安装  安装完成后,我安装了GIT 自己从官网去下载进行安装 2.检查安装是否成功,windows+r  -> cmd,输入 ...

  8. TF-IDF词频逆文档频率算法

    一.简介 1.RF-IDF[term frequency-inverse document frequency]是一种用于检索与探究的常用加权技术. 2.TF-IDF是一种统计方法,用于评估一个词对于 ...

  9. QtCreator设置野火iMx6开发板提供的qt交叉编译套件

    在Ubuntu18 QtCreator上添加野火iMx6开发板的Qt交叉编译环境PC:Ubuntu18.04QtCreator: 4.8.2交叉编译环境:野火提供的 5-编译工具链->qt交叉编 ...

  10. Linux命令——getfacl、setfacl

    简介 ACL是Access Control List的缩写,传统的Linux权限只能针对一个用户.一个群组及非此群组的其他人设置权限而已,无法针对单一用户或个人来设计权限.ACL可以对权限进行更细致的 ...