POJ 3904 Sky Code
来源:互联网 发布:网络销售有哪些类型 编辑:程序博客网 时间:2024/05/19 16:23
题目链接:http://poj.org/problem?id=3904
题意:在n个数中找出四元组的数量(四元组中的四个数的最大公约数为1)。
思路:可以用全部四元组的数量减去最大公约数不是1的四元组的数量。
我们将n个数一个个分解质因数,如果ai是质数x的倍数,那么就fact[x]++,那么最后C(fact[i],4)就是以i为倍数形成四元组的数量。
但是比如:6,12,18,24 这组既会被i=2的时候统计一次,又会被i=3的时候统计一次,所以用容斥去计算答案。
#include <cstdio>#include <cmath>#include <cstring>#include <cstdlib>#include <iostream>#include <algorithm>#include <stack>#include <map>#include <queue>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define LL long long#define ULL unsigned long long#define inf 0x7fffffff#define mod %100000007int n;int time[10009];int num[10009];int fact[20];LL f(int n) { LL ans = 1; ans*=n; ans*=n-1; ans*=n-2; return ans*(n-3)/24;}void init(int x){ int m = 0; int temp = x; for(int i = 2; i*i <= temp; i++) { if ( temp % i == 0 ) { fact[m++] = i; while( temp % i == 0 ) temp /= i; } } if ( temp > 1 ) fact[m++] = temp; int uplim = 1<<m; rep(i,1,uplim-1) { int cnt = 1; int t = 0; rep(j,0,m-1) if ( i & (1<<j) ) { t++; cnt*=fact[j]; } time[cnt]++; num[cnt] = t; }}int main(){ while(~scanf("%d",&n)) { Clean(num,0); Clean(time,0); int x; rep(i,1,n) { scanf("%d",&x); init(x); } LL ans = f(n); rep(i,2,10000) if ( time[i]>3 ) { if ( num[i] & 1 ) ans-=f(time[i]); else ans+=f(time[i]); } cout<<ans<<endl; } return 0;}
0 0
- POJ 3904 Sky Code
- POJ 3904 Sky Code
- POJ 3904 Sky Code 容斥原理
- poj 3904 sky code 容斥原理
- POJ 3904 Sky Code 容斥原理
- poj 3904 Sky Code【容斥原理】
- 容斥原理:poj 3904 Sky Code
- Sky Code - POJ 3904 容斥原理
- Sky Code - POJ 3904 容斥原理
- POJ 3904 Sky Code(容斥)
- POJ 3904 Sky Code (容斥原理)
- POJ 3904 Sky Code (容斥原理)
- POJ 3904 Sky Code (容斥原理)
- POJ 3904 Sky Code 已被翻译
- POJ 3904 Sky Code(容斥)
- poj 3904 Sky Code(容斥原理)
- POJ 3904:Sky Code _容斥原理
- POJ 3904 Sky Code 解题报告(容斥原理)
- (OK) 编译cBPM-android—CentOS 7—NDK8—androideabi-4.7—API14—2版
- Atitit.java相比c#.net的优点 优缺点 v2 q330
- 15个数字排列从小到大
- 通往WinDbg的捷径
- mininet下建立拓扑时关于远程控制器的一个小问题
- POJ 3904 Sky Code
- Android 动画anim translate中 fromXDelta、toXDelta、fromYDelta、toXDelta属性(转载)
- 【opencv】如何配置修改并调试opencv源代码
- C# WinForm开发系列 - DataGridView 使用方法集锦
- POJ 2104 K-th Number【划分树】
- java工程师的职业规划
- 杭电5610 Baby Ming and Weight lifting
- 用输入输出字节流拷贝图片,并进行异常处理
- (OK) 在CentOS7上安装Codeblocks的过程