51nod 1678 容斥原理
来源:互联网 发布:计算机组成原理 知乎 编辑:程序博客网 时间:2024/06/05 22:47
传送门
题意:输入一个数A,为1时,将a[i]改成b;为2时,求gcd(i,j)=1的j对应的a[j]的和
思路:求i与1-n中互质的数,这个很眼熟,是一个经典的容斥,即将n素因子分解,对n的素因子及素因子的组合进行容斥,最后用a[i]的和减去容斥的结果就是最后的结果了,但是如果直接求 某个素因子或者素因子的组合的 倍数和时,很容易超时,所以可以先预处理这些数的倍数和。在修改时也需要修改这些已经预处理过的倍数和,和a[i]的总和,也对要修改的下标进行了素因子分解
完整代码:
#include <cstdio>#include <cstring>#include <iostream>#include <vector>using namespace std;typedef long long LL;const int N=1e5+5;LL data[N];LL gsum[N];vector<LL> p;int main(){ LL n,q; scanf("%lld%lld",&n,&q); LL sum=0; for(LL i=1;i<=n;i++) { scanf("%lld",&data[i]); sum+=data[i]; } memset(gsum,0,sizeof(gsum)); for(LL i=2;i<=n;i++) { for(LL j=i;j<=n;j+=i) gsum[i]+=data[j]; } while(q--) { LL a; scanf("%lld",&a); if(a==1) { LL b,c; scanf("%lld%lld",&b,&c); LL m=b; p.clear(); for(LL i=2;i*i<=m;i++) { if(m%i==0) { p.push_back(i); while(m%i==0) m/=i; } } if(m>1) p.push_back(m); for(LL i=1;i<(1<<p.size());i++) { LL mul=1; LL cnt=0; for(LL j=0;j<p.size();j++) { if(i&(1<<j)) { cnt++; mul=mul*p[j]; } } gsum[mul]=gsum[mul]-data[b]+c; } sum=sum-data[b]+c; data[b]=c; } if(a==2) { LL temp,m; scanf("%lld",&temp); LL ans; if(temp!=1) ans=sum-data[temp]; else ans=sum; m=temp; p.clear(); for(LL i=2;i*i<=m;i++) { if(m%i==0) { p.push_back(i); while(m%i==0) m/=i; } } if(m>1) p.push_back(m); LL S=0; for(LL i=1;i<(1<<p.size());i++) { LL mul=1; LL cnt=0; for(LL j=0;j<p.size();j++) { if(i&(1<<j)) { cnt++; mul=mul*p[j]; } } if(cnt&1) { S=S+(gsum[mul]-data[temp]); } else { S=S-(gsum[mul]-data[temp]); } } printf("%lld\n",ans-S); } } return 0;}
阅读全文
0 0
- 51nod 1678 容斥原理
- 51Nod - 1407 容斥原理 + dp
- 51nod 1829 函数 容斥原理
- 51nod 1439:互质对 容斥原理 深搜!!!
- 51Nod 1439 互质对 容斥原理
- 51nod 1806 wangyurzee的树(purfer,容斥原理)
- 51 nod 1486 大大走格子(容斥原理)
- 51nod 1269 Devu and Flowers(容斥原理)
- 51nod 1317 相似字符串对 容斥原理+数学
- 51nod 1284【容斥】
- 51nod 1284:2 3 5 7的倍数 容斥原理
- 51nod 1284 2 3 5 7的倍数(容斥原理)
- 51nod 1284 2 3 5 7的倍数 容斥原理
- 51nod 1284 2 3 5 7的倍数(基础容斥原理)
- 【51Nod】1284 - 2 3 5 7的倍数(容斥原理 & 二进制优化)
- 51Nod 1284 2 3 5 7的倍数 (容斥原理)
- 51nod 序列变换 [容斥原理+莫比乌斯函数]【数论+组合数学】
- 51nod 1284 2、3、5、7的倍数 (容斥原理)
- request.setAttribute和session.setAttribute有什么区别
- 网络通信总结
- 64位ubuntu播放mp4安装插件出错的解决办法
- Hello world输出2(函数输出)
- 搭建fabric环境时遇到的一些问题 return process.dlopen(module, path._makeLong(filename));
- 51nod 1678 容斥原理
- 风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
- java 动态规划策略原理及例题
- Jedis使用
- HDU
- 拓展KMP详解+(笔记)
- HDU 6162 Ch’s gift
- poj-1661-Help Jimmy
- 常用标签