题目链接:http://acm.timus.ru/problem.aspx?space=1&num=2003
input | output |
---|---|
3 1 2 3 |
1 |
4 2 2 2 2 |
infinity |
题意:
问是否能按照类似:array {2, 3, 3, 6} turns it into array {gcd(2, 3), gcd(2, 3), gcd(2, 6), gcd(3, 3), gcd(3, 6), gcd(3, 6)}, 的方式,求所给数组!
代码如下:
#include <cstdio> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define INF 0x3f3f3f3f int a[10000047]; int main() { int n; int num; while(~scanf("%d",&n)) { memset(a, 0,sizeof(a)); int ans = -INF; for(int i = 0; i < n; i++) { scanf("%d",&num); int k = sqrt(num*1.0); for(int i = 2; i <= k; i++)//质因子 { if(num%i == 0) { a[i]++; ans = max(ans,a[i]); while(1) { if(num%i == 0) { num/=i; } else { break; } } } } if(num != 1) { a[num]++; } ans = max(ans,a[num]); } if(ans == 1) { printf("1\n"); } else if(ans == 2) { printf("2\n"); } else if(ans == 0) { printf("0\n"); } else { printf("infinity\n"); } } return 0; }
原文:http://blog.csdn.net/u012860063/article/details/43737463