标签:分成 idata temp 1221 int long aim include 互质
【题目描述】
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?
【输入】
第一行是一个正整数n。1 ≤ n ≤ 10。
第二行是n个不大于10000的正整数。
【输出】
一个正整数,即最少需要的组数。
【输入样例】
6 14 20 33 117 143 175
【输出样例】
3
// Created on 2020/2/6
/*#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <climits>
#include <string>*/
#include <bits/stdc++.h>
#define A 500+5
using namespace std;
//int i,j,k;
const int maxn=INT_MAX;
const int idata=20+5;
long long aim[idata];
bool judge[idata];
long long temp[idata];
int cnt=0;
char ch;
//int sum;
int t;
inline int gcd(long long a,long long b)//greatest common divisor
{
if(b==0) return a;
return gcd(b,a%b);
}
int main()
{
int cnt=1;
register int i,j;
cin>>t;
for(i=1;i<=t;i++)
{
cin>>aim[i];
}
memset(temp,1,sizeof(temp));
sort(aim+1,aim+1+t);//避免求公约数时再判断大小
temp[1]=aim[1];
for(i=2;i<=t;i++)
{
for(j=1;j<=cnt;j++)//每次筛选一个aim中的元素
{
if(gcd(aim[i],temp[j])==1)
{
temp[j]*=aim[i];
break;
}
}
if(j-1==cnt)//没有放入temp中(break 没有执行)
temp[++cnt]=aim[i];
}
cout<<cnt<<endl;
return 0;
}
C_Dreamy 发布了156 篇原创文章 · 获赞 6 · 访问量 3251 私信 关注
标签:分成,idata,temp,1221,int,long,aim,include,互质 来源: https://blog.csdn.net/C_Dreamy/article/details/104196978
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。