您的位置:首页 > 其它

51Nod-1179(思维、暴力)

2018-01-28 19:55 260 查看
/*

    51Nod-1179

    给出N个正整数,找出N个数两两之间最大公约数的最大值。

    例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。

    

    最大的最大公约数

    解题思路大概就是

    先建立一个足够大的数组,每输入一个数就使对应的元素++

    如 输入 15 则 a[15]++;

    然后用一个二重循环

    外层i从MAX到1每次--

    内层j从i到MAX每次+i

    再定义一个变量tmp+=a[j]

    当这个tmp>=2时跳出循环,输出i

    因为内层是+i,代表是i的倍数

    当tmp能够加上一个不为0的数,说明原本输入是有这个数,且这个数是当时i的倍数

    而tmp>=2则说明,有两个数都是i的倍数

    又因为是从MAX减小的,代表肯定是所有里面最大的

*/

#include <iostream>

#include <algorithm>

#include <stdio.h>

#include <math.h>

#include <string.h>

#define mod 1000000007

#define MAX 1000005

#define ll long long

#define PI acos(-1)

using namespace std;

int a[MAX];

int main()

{

    memset(a,0,sizeof(a));

    int n;

    cin>>n;

    for(int i=1;i<=n;i++)

    {

        int res;

        cin>>res;

        a[res]++;

    }

    int ans;

    for(int i=MAX;i>=1;i--)

    {

        int tmp=0;

        for(int j=i;j<=MAX;j=j+i)

        {

            tmp+=a[j];

            if(tmp>=2)

                break;

        }

        if(tmp>=2)

        {

            ans=i;

            break;

        }

    }

    cout<<ans<<endl;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: