C++递归算法之分成互质组

分成互质组

Description

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

Input

第一行是一个正整数
n

1 <= n <= 10

第二行是

n
个不大于
10000
的正整数。

Output

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

Sample Input

6
14 20 33 117 143 175

Sample Output

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);
}
    原文作者:递归算法
    原文地址: https://blog.csdn.net/c20190413/article/details/74857232
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞