51NOD 1179 最大的最大公约数 筛法

1179 最大的最大公约数

题目连接:

https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1179

Description

给出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

输出两两之间最大公约数的最大值。

Sample Input

4
9
15
25
16

Sample Output

5

Hint

题意

题解:

枚举答案x,那么对于只要a[i]%x==0,那么我就选择这个数

那么最后我选择出来的数,的最大公约数肯定是大于等于x的。

知道这个之后,调和级数那样去莽一波就好了

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int a[maxn];
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int x;scanf("%d",&x);
        a[x]++;
    }
    int ans = 1;
    for(int i=2;i<maxn;i++)
    {
        int tmp = 0;
        for(int j=i;j<maxn;j+=i)
            tmp+=a[j];
        if(tmp>=2)ans=i;
    }
    printf("%d\n",ans);
}
posted @ 2016-04-18 22:23  qscqesze  阅读(409)  评论(0编辑  收藏  举报