51Nod 1769 Clarke and math2
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的更多相关文章
- 【51Nod 1769】Clarke and math2
[51Nod 1769]Clarke and math2 题面 51Nod 题解 对于一个数论函数\(f\),\(\sum_{d|n}f(d)=(f\times 1)(n)\). 其实题目就是要求\( ...
- 【51Nod1769】Clarke and math2(数论,组合数学)
[51Nod1769]Clarke and math2(数论,组合数学) 题面 51Nod 题解 考虑枚举一个\(i_k\),枚举一个\(i\),怎么计算\(i_k\)对\(i\)的贡献. 把\(\f ...
- 【51Nod 1244】莫比乌斯函数之和
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...
- 51Nod 1268 和为K的组合
51Nod 1268 和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 51Nod 1278 相离的圆
51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...
- 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...
- 【51Nod 1622】【算法马拉松 19C】集合对
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1622 简单题..直接暴力快速幂 #include<cstdio&g ...
- 【51Nod 1616】【算法马拉松 19B】最小集合
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1616 这道题主要是查询一个数是不是原有集合的一个子集的所有数的gcd. ...
随机推荐
- Aspx后台遍历控件
aspx设计页面 //这个是检测按钮,检测下面的checkbox是否被选中.选中时打印其值 //https://www.cnblogs.com/pwblog/articles/3456385.html ...
- yii框架无限极分类的做法
用yii框架做了一个无限极分类,主要的数组转换都是粘贴的别人的代码,但还是不要脸的写出来,方便以后自己看 用的是递归,不是path路径 控制器: protected function subtree( ...
- node-red inject节点 debug节点 switch节点
inject节点: https://blog.csdn.net/geek_monkey/article/details/80737818 debug节点: https://blog.csdn.net/ ...
- java之spring mvc之拦截器
1. springmvc 中的拦截器是由实现 HandlerInterceptor 或者继承 HandlerInterceptorAdapter 来实现的. 2. 自定义实现一个拦截器的步骤: a). ...
- selenium中的元素操作之下拉列表操作(四)
下拉列表操作中分为两种:select.非select 1.非select的下拉框操作 非select下拉列表操作与网页元素操作一致,找到元素,定位元素,设置等待,点击元素等等 接下来操作百度的设置按钮 ...
- feign.FeignException: status 400 reading
feign.FeignException: status 400 reading : 请求方调用报错: 服务方被调用报错: 用fegin给redis设置缓存时报错,刚好 卡到8k这个临界点 ,就一直报 ...
- eclipse中启动tomcat后, 无法访问localhost:8080
问题: 今天老师讲了Servlet路径问题, 做了个测试在eclipse中启动tomcat后,在浏览器地址栏输入 http://localhost8080无法访问, 提示404错误, 正常情况是可以访 ...
- 如何解决NoSuchMethodError
背景 工作中写单测,本来用的Mockito,但是为了mock方法里调用的其他静态方法,所以需要使用powermock,于是开始报错. 我把包引入了,然后照着网上的写单测代码,写完了之后运行.噩梦开始. ...
- Iris Network Traffic Analyzer嗅探器
网卡配置 ftp测试
- AppDir【创建缓存目录】【建议使用这个工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 创建缓存目录 public static String APP_CACHE = "";// /storage/e ...