容斥原理 学习 M
来源:互联网 发布:画婚礼图软件 编辑:程序博客网 时间:2024/06/03 20:15
https://vjudge.net/contest/177165#rank
欢迎来刷我抄的专题.
因为数不大,很快就想到了质因数分解,然后容斥原理做一遍,但是取余的地方没细心.爆long long 却一直没发现.卡了很久.
思路大抵就是 : 质因数分解, 算每一个质因数的贡献,但我们平常所减的是求个数的,这里求完了个数后转变成和其实也蛮简单的, 我们这样考虑 1 - (n-1)中有a个p质因数的倍数, 那么这个质因数的贡献就是p*sum(1+2+..+a), 然后容斥消去重复 的就行了.
#include<cstdio>#include<iostream>#include<bitset>#include<cstring>#define ll long longconst int maxn = 5e5;using namespace std;const int mod = 1000000007;bitset<maxn> judge;int prime[maxn];int tot = 0;ll l,r,n;ll co[maxn];void init(){ judge.reset(); tot = 0; for(int i = 2; i < maxn ; i++){ if(!judge[i]){ prime[tot++] = i; } for(int j = 0; j < tot ;j++){ if(i*prime[j] >= maxn)break; judge[i*prime[j]] = 1; if(i%prime[j] == 0){ break; } } }}ll sum(ll n){ if(n%2==0){ return ((n/2)%mod*((n+1)%mod))%mod; }else{ return ((n+1)/2%mod*(n%mod))%mod; }}int cnt = 0;void slove(ll n){ cnt = 0; for(int i = 0; i < tot && prime[i] <= n;i ++){ if(n%prime[i] == 0){ co[cnt++] = prime[i]; while(n%prime[i] == 0){ n /= prime[i]; } } } if(n>1){ co[cnt++] = n; }}ll cal(ll a){ ll ans = 0; ll temp = 1; int cc = 0; for(int i = 1; i < (1<<cnt); i++){ temp = 1; cc = 0; for(int j = 0; j <cnt; j++){ if(i & (1<<j)){ temp *= co[j]; cc ++ ; } } if(cc&1)ans += ((sum(a/temp)%mod)*(temp%mod))%mod; else ans -= ((sum(a/temp)%mod)*(temp%mod))%mod; ans = (ans%mod + mod)%mod; } return ans;}int main(){ init(); //FILE *fp; //fp = fopen("in.txt", "w+"); //for(int r = 1; r < mod; r++){ while(scanf("%lld",&r) && r){ n = r; slove(n); printf("%lld\n",cal(r-1)%mod); }}
后来发现其实别人用欧拉函数做更有趣,
我们看到gcd(a, n) = 1, 那么肯定就有gcd(a, n-a) = 1,这样我们算到的phi[n]*n/2就是1 - (n-1)中与n互质的数和.
然后减一下就出来了.
阅读全文
1 0
- 容斥原理 学习 M
- 容斥原理学习
- 容斥原理学习
- 容斥原理的学习
- 容斥原理学习之路【容斥原理】
- SDUT 3023-当N遇上M(容斥原理)
- poj 2773 容斥原理求第k个与m互质的数
- Hdu 2204 Eddy's爱好 && Nyoj 526 M^k数[容斥原理]
- 容斥原理
- 容斥原理 POJ3904
- 【容斥原理】八
- 【八】容斥原理
- 广义容斥原理
- 容斥原理
- 容斥原理 专题
- 容斥原理 专题
- hdu4390 容斥原理
- hdu1695 容斥原理
- ES6之let关键字
- 8086汇编练习
- HDU1003(动态规划)
- 初探Android中LayoutInflater原理
- BZOJ4237(cdq分治+单调栈)
- 容斥原理 学习 M
- String, StringBuffer,StringBuilder的区别
- Dijkstra算法和Floyd算法
- Ajax上传文件返回参数
- sublime写python3可以添加的插件
- I'm Telling the Truth HDU
- 使用QJM构建HDFS HA架构(2.2+)
- py4j——用python访问java遇到的问题解决
- 酒客项目日志20170807