bzoj4407: 于神之怒加强版
来源:互联网 发布:数据采集与处理 编辑:程序博客网 时间:2024/05/17 06:29
链接
http://www.lydsy.com/JudgeOnline/problem.php?id=4407
题解
夜里挑灯做题,梦回莫比乌斯。
所以这是一道莫比乌斯反演。
设
根据题意,我们写出式子
根据经验,我们得知
然后我就写了一个SB暴力
根据题解,我们学会
令
因此右面的那一坨就是一个狄利克雷卷积。
令
根据狄利克雷卷积的运算性质,
所以
那么问题来了,怎么线性筛?框架请参考国家集训队论文,任之洲的《积性函数求和的几种方法》。这里只介绍一些不好实现的细节。
对于一个质数,可以直接算出其
对于一个只有一种素数因子的数,以由4推出8为例。
由于
离成功好像很接近了,还缺个
关于复杂度:显然只需要用到素数的快速幂,而素数的个数是
总的复杂度
代码
//莫比乌斯反演#include <cstdio>#include <algorithm>#define maxn 5000010#define mod 1000000007#define ll long longusing namespace std;int x[maxn], K, prime[maxn], mark[maxn], tmp[maxn], f[maxn];inline int fastpow(int a, int b, int p){ int ans=1, t=a; for(;b;b>>=1,t=(ll)t*t%p)if(b&1)ans=(ll)ans*t%p; return ans;}void init(){ int i, j, t; f[1]=1; for(i=2;i<maxn;i++) { if(!mark[i]) { prime[++prime[0]]=i; tmp[i]=i; x[i]=fastpow(i,K,mod); f[i]=(x[i]-1+mod)%mod; } for(j=1;j<=prime[0] and i*prime[j]<maxn;j++) { t=i*prime[j]; mark[t]=1; if(i%prime[j]==0) { tmp[t]=tmp[i]*prime[j]; if(tmp[t]!=t)f[t]=(ll)f[t/tmp[t]]*f[tmp[t]]%mod; else f[t]=(ll)f[i]*x[prime[j]]%mod; break; } f[t]=(ll)f[i]*f[prime[j]]%mod; tmp[i*prime[j]]=prime[j]; } } for(i=2;i<maxn;i++)f[i]=(f[i]+f[i-1])%mod;}inline void calc(int n, int m){ ll ans=0, lim=1e17; int i, last; if(n>m)swap(n,m); for(i=1;i<=n;i=last+1) { last=min(n/(n/i),m/(m/i)); ans+=(ll)(n/i)*(m/i)%mod*(f[last]-f[i-1])%mod; if(ans>lim)ans%=mod; } printf("%d\n",(int)(ans%mod+mod)%mod);}int main(){ int T, N, M; scanf("%d%d",&T,&K); for(init();T;T--) { scanf("%d%d",&N,&M); calc(N,M); } return 0;}
0 0
- BZOJ4407: 于神之怒加强版
- 【BZOJ4407】于神之怒加强版
- 于神之怒加强版[bzoj4407]
- bzoj4407: 于神之怒加强版
- bzoj4407 于神之怒加强版 莫比乌斯函数
- 【bzoj4407】【于神之怒加强版】【莫比乌斯反演】
- bzoj4407 于神之怒加强版(莫比乌斯反演+线性筛)
- [BZOJ4407]于神之怒加强版(莫比乌斯反演)
- bzoj4407于神之怒
- 4407: 于神之怒加强版
- 【BZOJ】【P4407】【于神之怒加强版】【题解】【数论】
- 于神之怒加强版 [Bzoj 4407]
- bzoj 4407 于神之怒加强版
- bzoj 4407: 于神之怒加强版
- 2017.9.26 于神之怒加强版 失败总结
- BZOJ 4407: 于神之怒加强版|莫比乌斯反演
- 4407: 于神之怒加强版 莫比乌斯反演+线性筛积性函数
- BZOJ_P4407 于神之怒加强版(数论+莫比乌斯反演)
- 安卓线程池和线程
- Window下Django为什么无法直接创建项目
- 蓝桥杯训练:2的次幂表示(递归)
- C# WinLockDll.dll屏蔽快捷键
- linux运维常用命令
- bzoj4407: 于神之怒加强版
- MQ 解决分布式事务的一些思路
- MediaPlayer
- Windows下python+selenium安装、使用
- Java基础(5):位运算的使用方式、运算符优先级的图示
- 算法设计Week6 LeetCode Algorithms Problem #455 Assign Cookies
- 将python2.7添加进64位系统的注册表方法
- python中的复制 浅拷贝 深拷贝
- jQuery动画连续触发、滞后反复执行解决办法