1221:分成互质组

【题目描述】

给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?

【输入】

第一行是一个正整数n。1 ≤ n ≤ 10。

第二行是n个不大于10000的正整数。

【输出】

一个正整数,即最少需要的组数。

【输入样例】

6
14 20 33 117 143 175

【输出样例】

3

【思路】

判断一个数是否与其他数为互质,是就添加到一组里,并把后一个数的位置换成零,创建这个组的数再乘上与他互质的数,不是就判断其他组,再不是就得自己再建一个新组,最后数一下非零的个数就得出答案了。

【题解】

#include
using namespace std;
int y=0,n,a[11];
int g(int a,int b){
    return b==0?a:g(b,a%b);
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(a[j]&&g(a[i],a[j])==1){
                a[i]*=a[j];
                a[j]=0;
            }
        }
    }
    for(int i=1;i<=n;i++)
        if(a[i]!=0)y++;
    cout<     return 0;
}

 

你可能感兴趣的:(算法,数据结构,c++)