51Nod 1179 最大的最大公约数

                       1179 最大的最大公约数
给出N个正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。
 
Input
第1行:一个数N,表示输入正整数的数量。(2 <= N <= 50000)
第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000)
Output
输出两两之间最大公约数的最大值。
Input示例
4
9
15
25
16
Output示例
5

n^2的做法显然不行
看数据范围 S[i]<=1000000 所以我们可以枚举每一个数的所有因子 这是可以开下的
然后找从大到小 找出现过两次以上的数 记为ans

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <cctype>
 4 
 5 const int MAXN=1000010;
 6 
 7 int n;
 8 
 9 int cnt[MAXN];
10 
11 inline void read(int&x) {
12     int f=1;register char c=getchar();
13     for(x=0;!isdigit(c);c=='-'&&(f=-1),c=getchar());
14     for(;isdigit(c);x=x*10+c-48,c=getchar());
15     x=x*f;
16 }
17 
18 int hh() {
19     read(n);
20     for(int x,i=1;i<=n;++i) {
21         read(x);
22         for(int j=1;j<=sqrt(x);++j) if(x%j==0) ++cnt[j],++cnt[x/j];
23     }
24     for(int i=1000000;i;--i) 
25       if(cnt[i]>=2) {
26           printf("%d
",i);
27           break;
28       }
29     return 0;
30 }
31 
32 int sb=hh();
33 int main(int argc,char**argv) {;}
代码
原文地址:https://www.cnblogs.com/whistle13326/p/7652853.html