博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【CF900D】Unusual Sequences
阅读量:5146 次
发布时间:2019-06-13

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

智力下降严重

显然要反演了呀

首先必须满足\(x|y\),否则答案是\(0\)

我们枚举这个数列的\(gcd\)\(d\)或者\(d\)的倍数

于是答案就是

\[\sum_{x|d}[d|y]\mu(\frac{x}{d})g(\frac{y}{d})\]

\(g(d)\)表示和为\(d\)的正整数数列的数量,显然就是插一下板,于是\(g(d)=\sum_{i=1}^d\binom{d-1}{i-1}=2^{d-1}\)

代码

#include
#define re register#define LL long longinline int read() { char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;}const int mod=1e9+7;const int maxn=1e5+5;inline int ksm(int a,int b) { int S=1; for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod; return S;}int n,m,T,ans;int f[maxn],p[maxn>>1],mu[maxn];inline int getmu(int x) { if(x<=T) return mu[x];int now=0; for(re int i=1;i<=p[0]&&x!=1;++i) { if(x%p[i]) continue; x/=p[i];now^=1; if(x%p[i]==0) return 0; } if(x!=1) now^=1; if(!now) return 1;return -1;}inline void add(int i) { if(i%n) return; int x=getmu(i/n); if(x==1) ans=(ans+ksm(2,m/i-1))%mod; if(x==-1) ans=(ans-ksm(2,m/i-1)+mod)%mod;}int main() { scanf("%d%d",&n,&m); if(m%n) {puts("0");return 0;} T=std::ceil(std::sqrt(m/n));f[1]=mu[1]=1; for(re int i=2;i<=T;i++) { if(!f[i]) p[++p[0]]=i,mu[i]=-1; for(re int j=1;j<=p[0]&&p[j]*i<=T;++j) { f[p[j]*i]=1;if(i%p[j]==0) break; mu[p[j]*i]=-1*mu[i]; } } for(re int i=1;i*i<=m;++i) { if(m%i) continue; add(i);if(m/i!=i) add(m/i); } printf("%d\n",ans); return 0;}

转载于:https://www.cnblogs.com/asuldb/p/11373482.html

你可能感兴趣的文章
进阶のJAVA11
查看>>
Loadrunner模拟Json请求
查看>>
哈哈,开通博客啦,可以与各位学习交流编程知识啦
查看>>
非GUI模式下运行JMeter
查看>>
数据类型的自定义(2)
查看>>
(20160602)开源第三方学习之SDWebImage
查看>>
DataGridView合并单元格,重绘后选中内容被覆盖的解决办法
查看>>
全局捕获异常
查看>>
ASP.Net中传递参数的常见方法
查看>>
Python学习路径及练手项目合集
查看>>
WIP 004 - Quote/Policy Search
查看>>
杭电2063(过山车)
查看>>
js判断奇偶数实现隐藏显示功能 与css立体按钮
查看>>
python学习一,python基本语法
查看>>
团队工作第三日11月17日
查看>>
jQuery 新添加元素事件绑定无效
查看>>
Java并发编程:volatile关键字解析(学习总结-海子)
查看>>
Android实用代码七段(一)
查看>>
SVN命令使用详解
查看>>
利用crontab定时提交svn遇到的几个问题
查看>>