51Nod-1179(思維、暴力)
阿新 • • 發佈:2019-01-30
/*
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;
}
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;
}