1221:分成互质组
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 7405 通过数: 3453
【题目描述】
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?
【输入】
第一行是一个正整数n。1 <= n <= 10。
第二行是n个不大于10000的正整数。
【输出】
一个正整数,即最少需要的组数。
【输入样例】
6
14 20 33 117 143 175
【输出样例】
3
【分析】
这道题没有必要放到dfs中,直接枚举即可,n个数,逐一枚举,比较其后所有元素,是否是同质,如果是互质,gcd(a[i],a[j])==1,则加入组中。
【参考代码】
#include<stdio.h>
#define N 15
int a[N]; //存数数组
int vis[N]; //访问数组
int cnt; //分组数
int gcd(int a,int b)
{
return a%b==0 ? b : gcd(b,a%b);
}
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(!vis[i])
{
vis[i]=1;
cnt++;
for(j=i+1;j<n;j++)
{
if(!vis[j] && gcd(a[i],a[j])==1) //未访问且互质,添加进组
{
a[i]*=a[j]; //2,3互质,再判断就需要和6互质
vis[j]=1;
}
}
}
}
printf("%d\n",cnt);
return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1221