解题报告:POJ_3904 Sky Code 莫比乌斯反演|容斥
来源:互联网 发布:三菱plc如何编程 编辑:程序博客网 时间:2024/05/30 04:42
题目链接
题意:
给定n个数,要求从中选出4个数,使得这4个数的最大公因子为1,求满足条件的组数。
思路:
简单的容斥,用f(x)表示最大公因子为x的倍数的组数,那么答案为:
ans =
代码:
#include<cstdio>#include<vector>#include<cstring>using namespace std;const int N = 1e4+10;int mu[N];bool Np[N];vector<int>pr;vector<int>E[N];int num[N];void init(){ mu[1] = 1; for(int i=2;i<N;i++){ if(!Np[i]){ pr.push_back(i); mu[i] = -1; }for(int j=0;j<pr.size();j++){ int t = pr[j] * i; if(t>N)break; Np[t] = true; if(i%pr[j]==0){ mu[t] = 0; break; }mu[t] = -mu[i]; } } for(int i=1;i<N;i++){ for(int j=i;j<N;j+=i){ E[j].push_back(i); } }}long long C(int n){ if(n<4)return 0; long long res = 1; for(int i=0;i<4;i++){ res *= (n-i); }for(int i=2;i<=4;i++){ res /= i; }return res;}int main(){ init(); int n,x; while(scanf("%d",&n)==1){ memset(num,0,sizeof(num)); int m = 0; while(n--){ scanf("%d",&x);m = max(m,x); for(int i=0;i<E[x].size();i++){ int j = E[x][i]; num[j]++; } }long long ans = 0; for(int i=1;i<=m;i++){ if(mu[i]){ ans += 1LL * mu[i] * C(num[i]); } }printf("%lld\n",ans); }return 0;}
阅读全文
0 0
- 解题报告:POJ_3904 Sky Code 莫比乌斯反演|容斥
- poj 3904 Sky Code 莫比乌斯反演 或 容斥原理
- POJ 3904 Sky Code (容斥+莫比乌斯反演)
- POJ 3904 Sky Code 莫比乌斯反演 容斥原理
- POJ 3904 Sky Code 解题报告(容斥原理)
- 解题报告:HDU2841 Visible Trees 莫比乌斯反演
- 解题报告:BZOJ_2818 Gcd 莫比乌斯反演
- 解题报告:HDU_6053 TrickGCD 莫比乌斯反演
- 解题报告:HDU_6134:Battlestation Operational (莫比乌斯反演)
- HDU 5212 Code(容斥 或 莫比乌斯反演)
- HDU 5212 Code (容斥 莫比乌斯反演基础题)
- HDU 5212 Code(容斥 或 莫比乌斯反演)
- BZOJ2440 莫比乌斯反演 + 二分+ 容斥
- hdu5468 Puzzled Elena(容斥 莫比乌斯反演)
- 【HDU1695】GCD(莫比乌斯反演+容斥)
- bzoj 2301 莫比乌斯反演+容斥原理
- BZOJ2301 容斥原理,莫比乌斯反演
- HDU6053-TrickGCD 容斥原理+莫比乌斯反演
- Java经典问题算法大全
- kafka实践
- HDU1048
- 【CodeForces 635A】 Bear and Three Balls
- spring Boot配置
- 解题报告:POJ_3904 Sky Code 莫比乌斯反演|容斥
- linux 网络性能测试工具iperf
- 《Spring3实战》摘要(4-1)--面向切面的Spring
- TCP和UDP分片大小
- 用VS编写第一个C++程序
- 系统睡眠、注销时 SharpDX绘制失效
- http和https
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- 输出旋转数组的最小值