信息奥赛一本通1221:分成互质组

【题目描述】
给定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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mengdicfm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值