您的位置:首页 > 其它

51Nod 1179 最大的最大公约数

2017-10-15 14:02 246 查看
                       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\n",i);
27           break;
28       }
29     return 0;
30 }
31
32 int sb=hh();
33 int main(int argc,char**argv) {;}


代码
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: