分成互质组
-
第一行是一个正整数
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); }
Description
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?