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

来源:互联网 发布:js中window事件 编辑:程序博客网 时间:2024/06/05 04:16

分成互质组


Description

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

Input

第一行是一个正整数n1 <= n <= 10
第二行是
n个不大于10000的正整数。

Output

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

Sample Input

614 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);}


原创粉丝点击