bzoj 4176: Lucas的数论 (反演)
来源:互联网 发布:csm算法 编辑:程序博客网 时间:2024/06/05 14:24
题目描述
传送门
题目大意:
设f(ij)表示i*j的约束个数,求
n<=1e9
题解
要化简上面的式子,就必须科学的表示出
如果你做过SDOI的约数个数和,那么就应该知道
这个怎么证?其实可以感受一下。
当j=1的时候,我们加入了n的所有约数
当i=1的时候,我们加入了m的所有约数
但是n,m的约数可能是有交集的,但是交集中的元素都可以用一个之前未出现的约数替换,并且在后面计算中这个约数不会再加入。比如说n有一个质因子为pi指数为x,m也有pi这个质因子指数为y,那么m中的pi^{1..y}其实都可以换成pi^{x+1…y},其他的也是同样的道理。
剩下的数当且仅当gcd(i,j)=1,可以形成新的约数。总之如果i,j不互质,那么一定可以用一对互质的i’,j’替换掉。
那么利用上面的式子,我们进行化简
n的范围是1e9,所以肯定不能
这里的话应该可以想到
设
这是要算一个
考虑哪些值对我们的计算有用处,
代码
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define N 10000000#define LL long long #define p 1000000007using namespace std;int n,n1,pd[N],prime[N];LL mu[N],sum[N];void init(){ mu[1]=1; for (int i=2;i<=n1;i++) { if (!pd[i]) { prime[++prime[0]]=i; mu[i]=-1; } for (int j=1;j<=prime[0];j++) { if (i*prime[j]>n1) break; pd[i*prime[j]]=1; if (i%prime[j]==0) { mu[i*prime[j]]=0; break; } mu[i*prime[j]]=-mu[i]; } } for (int i=1;i<=n1;i++) mu[i]=mu[i-1]+mu[i];}LL calc(int n){ LL ans=0; for (int i=1,j;i<=n;i=j+1) { j=n/(n/i); ans=(ans+(LL)(j-i+1)*(n/i))%p; } return ans*ans%p;}LL get_sum(int x){ if (x<=n1) return mu[x]; return sum[n/x];}void summu(){ int t; for (t=1;n/t>n1;t++); for (int k=t;k;k--) { int m=n/k; sum[k]=1; for (int i=2,j;i<=m;i=j+1) { j=m/(m/i); sum[k]-=(LL)(j-i+1)*get_sum(m/i)%p; sum[k]%=p; } }}int main(){ freopen("a.in","r",stdin); freopen("my.out","w",stdout); scanf("%d",&n); n1=ceil(pow(n,0.75)); init(); summu(); LL ans=0; for (int i=1,j;i<=n;i=j+1) { j=n/(n/i); ans=(ans+(get_sum(j)-get_sum(i-1))*calc(n/i)%p)%p; } printf("%lld\n",(ans%p+p)%p);}
0 0
- bzoj 4176: Lucas的数论 (反演)
- BZOJ 4176 Lucas的数论 莫比乌斯反演
- bzoj 4176 Lucas的数论 莫比乌斯反演
- bzoj 4176 Lucas的数论
- BZOJ 4176 Lucas的数论
- BZOJ 4176: Lucas的数论 莫比乌斯反演 杜教筛
- 【BZOJ 4176】 Lucas的数论 - 杜教筛
- [杜教筛 约数个数前缀和] BZOJ 4176 Lucas的数论
- 4176: Lucas的数论
- bzoj4176 Lucas的数论 (杜教筛 +莫比乌斯反演)
- BZOJ 2671(Calc-数论反演)
- BZOJ 4403: 序列统计 (组合数 Lucas 数论推导)
- bzoj4176 Lucas 的数论
- [bzoj4176]Lucas的数论
- lucas (数论定理)
- [数论 反演] BZOJ 4833 最小公倍佩尔数
- [杜教筛] BZOJ4176. Lucas的数论
- bzoj 2820: YY的GCD (反演)
- 流式计算框架调研
- python 的特殊方法 __str__和__repr__
- Struts2笔记
- Bitmap如何高效加载图片
- c++常见题目,编写string类
- bzoj 4176: Lucas的数论 (反演)
- Android Studio集成友盟APP统计
- ffmpeg日志回调添加
- 强化学习读书笔记
- nodeJS socket 多个房间的聊天室
- 总结的一些简单实用的小方法
- 初识Shiro
- Spring组合属性
- Android Matrix的用法总结