【51nod】最大的最大公约数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43238423/article/details/102690080

http://www.51nod.com/Challenge/Problem.html#problemId=1179

这道题挺有意思,让求最大的两两最大公约数,很显然暴力直接做复杂度太高。可以利用试除法,枚举每一个数的因子,如果某个因子出现超过了两次,就可以进行判断,因为题目要求两两。。。最大公约数一定是某个数的因子。

#include<iostream>
#include<algorithm>
using namespace std;
int cnt[50005],ans=-0x3f;
int k=0;
void solve(int val)
{
    for(int i=1;i*i<=val;i++)
    {
        if(val%i==0)
        {
            cnt[i]++;
            if(cnt[i]>=2) ans=max(ans,i);
            if(i*i!=val) {cnt[val/i]++;if(cnt[val/i]>=2) ans=max(ans,val/i);}
        }
    }
}
int main(void)
{
    int n,x;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&x);
        solve(x);
    }
    cout<<ans;
}

猜你喜欢

转载自blog.csdn.net/weixin_43238423/article/details/102690080