【数位DP+莫比乌斯函数】2017计蒜之道复赛A[阿里云秘钥池]题解
来源:互联网 发布:淘宝月销量怎么变少了 编辑:程序博客网 时间:2024/06/06 10:01
题目概述
求
解题报告
肯定是数位DP,把转移方程表示出来:
所以当已知
示例程序
#include<cstdio>#include<cstring>using namespace std;typedef long long LL;const int maxl=60,maxp=1e5;int te,P,mu[maxp+5],p[maxp+5];bool pri[maxp+5];int a[maxl+5];LL L,R,f[maxl+5][maxp+5];void Make(){ pri[1]=true;mu[1]=1; for (int i=2;i<=maxp;i++) { if (!pri[i]) p[++p[0]]=i,mu[i]=-1; for (int j=1,t;j<=p[0]&&(t=i*p[j])<=maxp;j++) { pri[t]=true;mu[t]=-mu[i]; if (!(i%p[j])) {mu[t]=0;break;} } }}int gcd(int a,int b) {if (!b) return a;return gcd(b,a%b);}LL Dfs(int i,int j,bool fl){ if (i==1) return 1;if (!fl&&f[i][j]) return f[i][j]; int MAX=0;if (fl) MAX=a[i-1]; else MAX=P-1;LL ans=0; for (int k=1;k<=MAX;k++) if (gcd(j,k)==1) ans+=Dfs(i-1,k,fl&&k==MAX); if (!fl) f[i][j]=ans;return ans;}inline LL Solve(LL x){ a[0]=0;do a[++a[0]]=x%P,x/=P; while (x);LL ans=0; for (int i=1;i<a[0];i++) for (int j=1;j<P;j++) ans+=Dfs(i,j,false); for (int j=1;j<=a[a[0]];j++) ans+=Dfs(a[0],j,j==a[a[0]]); return ans;}int main(){ freopen("program.in","r",stdin); freopen("program.out","w",stdout); for (Make(),scanf("%d",&te);te;te--) { scanf("%lld%lld%d",&L,&R,&P); LL x=R;a[0]=0;do a[++a[0]]=x%P,x/=P; while (x); for (int i=0;i<=a[0];i++) for (int j=0;j<P;j++) f[i][j]=0; for (int j=1;j<P;j++) f[1][j]=1; for (int i=2;i<=a[0];i++) for (int d=1;d<P;d++) { LL sum=0;for (int t=d;t<P;t+=d) sum+=f[i-1][t]; for (int t=d;t<P;t+=d) f[i][t]+=sum*mu[d]; } printf("%lld\n",Solve(R)-Solve(L-1)); } return 0;}
阅读全文
0 0
- 【数位DP+莫比乌斯函数】2017计蒜之道复赛A[阿里云秘钥池]题解
- [数位DP 莫比乌斯反演] 2017 计蒜之道 复赛 A. 阿里云秘钥池
- 【莫比乌斯反演+数位DP】2017 计蒜之道 复赛 A.阿里云秘钥池
- 【计蒜客】「2017 计蒜之道 复赛」A.阿里云秘钥池 数位DP+莫比乌斯函数
- [反演] 2017 计蒜之道 复赛 A. 阿里云秘钥池
- 2017 计蒜之道 复赛 题解
- [数位DP Lucas定理] 2017 计蒜之道 复赛 E. 商汤智能机器人
- [lucas+数位DP] 2017 计蒜之道 复赛 E. 商汤智能机器人
- [莫比乌斯反演+数位DP]计蒜客 阿里云秘钥池
- [计蒜之道 复赛2017] 题解 (只有 A,E 两题)
- 2017计蒜之道程序设计大赛复赛题解
- [Lucas+数位DP] 2015 计蒜之道 复赛 C. 360的产品试用体验
- 2017 计蒜之道 复赛 <状压DP+最短路>
- 2016 计蒜之道 复赛 A
- 【分治+Floyd】2016计蒜之道复赛A[百度地图的实时路况]题解
- 2016 计蒜之道 复赛 题解 部分
- [Lucas定理 数位DP 容斥原理] 2015 计蒜之道 复赛 360的产品试用体验
- [ Lucas定理 数位DP 容斥 ] 「2015 计蒜之道 复赛」360的产品试用体验
- 图像处理中的数学原理详解(Part1 总纲)
- XGBoost 安装失败最后尝试的一种方法
- Extractive Summarization using Continuous Vector Space Models
- Jzoj4384 Hashit
- Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能
- 【数位DP+莫比乌斯函数】2017计蒜之道复赛A[阿里云秘钥池]题解
- CUDA学习笔记(3) NVRTC编译库
- Matlab 绘图小笔记
- 展讯6531平台socket
- PyCharm下载第三方库的简便方式
- 机器学习中的核函数(激活函数)
- 《网蜂A8实战演练》——8.Linux USB 主机控制器和设备驱动
- LeetCode--Binary Tree Level Order Traversal
- VB.NET机房收费系统之组合查询(模板方法模式)