博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[hdu5628]Clarke and math(dirichlet卷积)
阅读量:6820 次
发布时间:2019-06-26

本文共 1206 字,大约阅读时间需要 4 分钟。

狄利克雷卷积定义:\[(f*g)(n)=\sum_{d|n}f(d)*g({\frac n d})\]狄利克雷卷积满足交换律:\[f*g=g*f\]结合律:\[(f*g)*h=f*(g*h)\]还有这么几个性质:\[f*\varepsilon=f\] \[f*1=\sum_{d|n}f(d)\]其中\[1(n)=1,\varepsilon(n)=[n=1]\]我们做这个题就是用的上面那条,题目中的式子可以化成这样:\[1^k*f\]然后快速幂就好了。
代码:

#include
#define ll long longusing namespace std;inline int read(){ int x=0;char ch=' ';int f=1; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f;}const int p=1e9+7;int n,k;ll a[100001];void dirichlet(ll *ans,ll *f){ memset(a,0,sizeof(a)); for(int i=1;i*i<=n;i++){ a[i*i]=(a[i*i]+ans[i]*f[i])%p; for(int j=i+1;j*i<=n;j++){ a[i*j]=(a[i*j]+ans[i]*f[j])%p; a[i*j]=(a[i*j]+ans[j]*f[i])%p; } } for(int i=1;i<=n;i++)ans[i]=a[i];}ll f[100001],ans[100001],x[100001];void ksm(){ int b=k; while(b){ if(b&1){ dirichlet(ans,x); } dirichlet(x,x); b>>=1; }}void solve(){ for(int i=1;i<=n;i++){ f[i]=read(); x[i]=1; ans[i]=0; } ans[1]=1; ksm(); dirichlet(f,ans); for(int i=1;i

转载于:https://www.cnblogs.com/stone41123/p/7605431.html

你可能感兴趣的文章
初识Nginx——nginx的编译、安装及特点(一)
查看>>
通过redis扩展分布式存储fastdfs的数据对应及方案
查看>>
我的友情链接
查看>>
Linux学习记录--日志系统
查看>>
什么是OTT
查看>>
大型互联网站解决高并发的常见策略
查看>>
Apache Rewrite
查看>>
UML学习笔记(7)——时序图
查看>>
python爬虫基础
查看>>
Java 单例模式 学习
查看>>
Struts1.x系列教程(19):LookupDispatchAction类处理一个form多个submit
查看>>
ubuntu LTSP 无盘多终端ubuntu系统
查看>>
phpstorm支持CodeIgniter自动补全
查看>>
linux磁盘批量分区格式化和挂载脚本
查看>>
第一次尝试OSCHINA博客平台
查看>>
常用html、CSS、javascript前端命名规范
查看>>
EasyMock 用法
查看>>
postgresql事务处理与并发控制
查看>>
使用Apache的ab工具对比Nginx与Apache静态页面处理能力
查看>>
linux基本命令之用户篇
查看>>