51Nod 1179 最大的最大公约数

来源:互联网 发布:配置windows update%0 编辑:程序博客网 时间:2024/04/29 22:38
                       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示例
49152516
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) {;}
代码

 

原创粉丝点击