如果效率还是不行,再将printf改成输出到文件中。
其一,对于求最大公约数(GCD)常用欧几里得算法,时间复杂度为O(logn)
其二,注意读题,题目问的是N个数的最大公约数,而不是N对数分别的最大公约数,只需对前两个数和第三个数求最大公约数即为三个数的最大公约数,以此类推。
不保证无误的一份代码:
#include <bits/stdc++.h>
using namespace std
int gcd(int a, int b)
{
int r
while(r)
{
r=a%b
a=b
b=r
}
return a
}
int main()
{
int n
cin>>n
int ans,a
cin>>ans
for(int i=1i<ni++)
{
cin>>a
ans=gcd(ans,a)
}
cout<<ans<<endl
return 0
}
n 太大耗时太多,需要改小去掉 gets()
增加一个 int k用来判断scanf输入成功.
while( (k=scanf("%d", &n))!=EOF) {
if(k==1 &&n>12 &&n<=1300000) {}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)