51Nod 1179 最大的最大公约数

Posted 心之所向 素履以往

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",i);
27           break;
28       }
29     return 0;
30 }
31 
32 int sb=hh();
33 int main(int argc,char**argv) {;}
代码

 

以上是关于51Nod 1179 最大的最大公约数的主要内容,如果未能解决你的问题,请参考以下文章

51nod 1179 最大的最大公约数

51nod 1179 最大的最大公约数 (无耻的打表计数法)

51nod 1179 最大的最大公约数

51nod 1179 最大的最大公约数

最大的最大公约数( 51nod-1179)

51 Nod 1179 最大的最大公约数(筛法)