A46311. 分成互质组给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?输入第一行是一个正整数 n 。 1 <= n <= 10 。第二行是 n 个不大于 10000 的正整数。输出一个正整数,即最少需要的组数。样例输入614 20 33 117 143 175样例输出3
填空题
困难
知识点
题目描述
分成互质组
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?
输入
第一行是一个正整数 n 。 1 <= n <= 10 。
第二行是 n 个不大于 10000 的正整数。
输出
一个正整数,即最少需要的组数。
样例输入
6
14 20 33 117 143 175
样例输出
3
参考答案
#include<cstdio>
#include<cstring>
int n,a[20],b[20],c=1;
int fun(int x,int y) //递归法判断互质
{
if(!y) return x;
return fun(y,x%y);
}
int main()
{
memset(b,1,sizeof(b)); //以便于"b[j]*=a[i];"
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
b[1]=a[1];
for(int i=2;i<=n;i++)
{
int j;
for(j=1;j<=c;j++)
if(fun(a[i],b[j])==1)
{
b[j]*=a[i];
break;
}
if(j-1==c) //意思就是上面的"break"一次都没有执行
b[++c]=a[i];
}
printf("%d",c);
}
上一题
下一题