【题目描述】
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?
【输入】
第一行是一个正整数n。1 ≤ n ≤ 10。
第二行是n个不大于10000的正整数。
【输出】
一个正整数,即最少需要的组数。
【输入样例】
6
14 20 33 117 143 175
【输出样例】
3
我的解题思路:
假设分成了k组。有a[n]个数据。
先找第一组,第一组第一个数为a[1],第二个数从第二个位置开始找,后一个数从前一个数的位置往后找,直到数组遍历结束,第一组数据找完。找过的数据都标记一下使用状态为1。
……
第k-1组的第一个数的下标为flag
第k组的第一个数据从flag+1处往后找
每个数据加入对应的互质组后,剩余的数字个数减1
……
当找到第k组时,先判断剩余数字个数是否为0,如果为0,则分组结束,输出结果。如果不为0,则在剩余所有数字中,找第k+1组的数据。
代码如下:
//1221:分成互质组
#include<iostream>
using namespace std;
//互质数指两个数或多个数的公因数只有1
int n,a[11];
int use[11];//记录第i个数是否已经是某个互质数组里的;
int hz[11][11];//hz[i][0]记录第i组互质数共有几个数字,hz[i][j]为第i组的互质数中的第j个数字
int ln;//记录剩余几个数字没有加入互质组
int flag=0;//记录前一组互质数的第一个数字在原数组中的位置
int num;//记录有几组
bool huzh