hdu5072 coprime 容斥 和睦三元组
来源:互联网 发布:mac ati hd5770 工具 编辑:程序博客网 时间:2024/04/30 12:12
容斥的一个经典题型的变形。忘记ans清零怒WA七发。。
可以用改进的素数筛快速求出n个数中每个数的不互素数个数,效率大概是max(a[i])log(max(a[i]))。
虽然数据很水用暴力遍历每个数因数分解再进行容斥的方法也能过。。。
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int num[100100],good[100100],cnt[100100],d[100100],n,m,a[100100];long long solve(){memset(good,1,sizeof(good));memset(cnt,0,sizeof(cnt));memset(d,0,sizeof(d));long long ans=0;for(int i=2;i<=a[n-1];i++){if(good[i]){if(d[i]==0){d[i]=1;}int nn=0;for(int j=1;i*j<=a[n-1];j++){if(num[i*j]){nn++;}}for(int j=1;i*j<=a[n-1];j++){if(d[i]==1&&j>1){if(j%i==0){good[i*j]=0;}else{++d[i*j];}}cnt[i*j]+=nn*(d[i]&1?1:-1);}}if(num[i]==1&&cnt[i]>0){ans+=(long long)(cnt[i]-1)*(n-cnt[i]);}}return (long long)n*(n-2)*(n-1)/6-(ans/2);}int main(){int t;scanf("%d",&t);while(t--){scanf("%d",&n);memset(num,0,sizeof(num));memset(nn,0,sizeof(nn));for(int i=0;i<n;i++){scanf("%d",&a[i]);num[a[i]]=1;}sort(a,a+n);printf("%lld\n",solve());}return 0;}
0 0
- hdu5072 coprime 容斥 和睦三元组
- hdu5072 Coprime | 2014鞍山赛区C题 | 容斥原理
- 【HDU5072】Coprime-补集转化+容斥原理+质因数分解
- HDU5072 Coprime
- hdu5072 Coprime
- HDU5072 coprime
- hdu5072 Coprime 2014鞍山现场赛C题 容斥原理+单色三角
- 2014 鞍山区域赛 C HDU5072 Coprime 莫比乌斯/容斥+同色三角形
- HDU5072-Coprime-2014鞍山站C题-单色三角形+容斥
- hdu5072 容斥原理
- HDU5072(容斥)
- HDU5072 容斥原理
- hdu5072 数论 + 容斥
- hdu3388 Coprime【容斥原理】
- HDU3388 -Coprime-容斥原理
- 【数论】hdu5072 Coprime (容斥求互质+组合计数)
- Hdu 5072 Coprime(容斥)
- hdu 5072 Coprime(容斥)
- linux中与test命令相同功能的[] __demo
- 第九周项目3 稀疏矩阵的三元组表示的实现1
- [LeetCode]034-Search For A Range
- JAVA设计模式初探之桥接模式
- 正则表达式
- hdu5072 coprime 容斥 和睦三元组
- java 垃圾回收机制
- hibernate,annotation,注解
- hdoj2022海选女主角
- Linux C编程----3(gdb调试)
- HDU1754
- 2015年小结
- 魔王语言(C++
- LBP(局部二值模式)实现人脸识别