测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A46311. 分成互质组给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?输入第一行是一个正整数 n 。 1 <= n <= 10 。第二行是 n 个不大于 10000 的正整数。输出一个正整数,即最少需要的组数。样例输入614 20 33 117 143 175样例输出3

填空题 困难

题目描述

分成互质组

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

输入

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

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

输出

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

样例输入

6

14 20 33 117 143 175

样例输出

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); }
上一题 下一题