51Nod 1179 最大的最大公约数
生活随笔
收集整理的这篇文章主要介绍了
51Nod 1179 最大的最大公约数
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1179 最大的最大公约数
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) {;} 代码
给出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) {;} 代码
转载于:https://www.cnblogs.com/whistle13326/p/7652853.html
总结
以上是生活随笔为你收集整理的51Nod 1179 最大的最大公约数的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: CentOS linux7 设置开机启
- 下一篇: [UVALive 3971] Assem