描述
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?
输入
第一行是一个正整数n。1 <= n <= 10。
第二行是n个不大于10000的正整数。
输出
一个正整数,即最少需要的组数。
样例输入
6 14 20 33 117 143 175
样例输出
3
代码:
#include<bits/stdc++.h>
using namespace std;
int a[11],c[11],n,ans;
int gcd(int x,int y)//最大公因数
{
int r=x%y;
while(r)
{
x=y;
y=r;
r=x%y;
}
return y;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
if(c[i]==0)//判断a[i]是否使用过
{
ans++;
for(int j=n;j>=i+1;j--)//从大到小更优
if(gcd(a[i],a[j])==1&&c[j]==0)//判断a[i],互质且a[j]未使用过
{
a[i]=a[i]*a[j];//包含所有质因子
c[j]=1;
}
}
}
cout<<ans<<endl;
return 0;
}