【openjudge】分成互质组
来源:互联网 发布:淘宝开店在哪里拿货 编辑:程序博客网 时间:2024/06/05 22:59
7834:分成互质组
总时间限制: 1000ms 内存限制: 65536kB
描述
给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?
输入
第一行是一个正整数n。1 <= n <= 10。
第二行是n个不大于10000的正整数。
输出
一个正整数,即最少需要的组数。
样例输入
614 20 33 117 143 175
样例输出:
3
来源
2008年第十三届“华罗庚金杯”少年数学邀请赛 决赛第5题
【解析】
本题有两种做法,在此,重点讲述第一种方法,至于各种思路,已迁入代码之中。
方法一:
状态: Accepted
#include<iostream> using namespace std; int n,ans=1e9+1; bool flag; int a[10010],b[10010];//a[]保存数int panduan(int a,int b)//递归法判断互质 { if(b==0)return a; return panduan(b,a%b); } void dfs(int x,int y)//搜到了第x个数,现在有y个集合{ if(x==n+1)//搜索完成,取最小值,退出 { ans=min(ans,y); return; } for(int i=1;i<=y;i++)//组数 { flag=true; for(int j=1;j<x;j++)//不能加‘=’,因为如果加了‘=’,一个数就可以进这重循环,即x=1时,不可能自己比自己吧。 { if(b[j]==i) { if(panduan(a[x],a[j])!=1)//如果不为互质数 { flag=false;//就没必要比,再继续加下去了, break;//跳出 } } } if(flag)//如果前边加的数字都为互质数,就再加数,继续判断 { b[x]=i;//保存组数 dfs(x+1,y);//加数字,但不加组 b[x]=0;//回溯 } } b[x]=y+1;//集合数加1 dfs(x+1,y+1);//进行下一次查找 b[x]=0; //回溯 } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; dfs(1,1);//从第一个(数,组)开始 cout<<ans<<endl; return 0; }
方法二:
#include<cstdio> #include<cstring> int n,a[20],b[20],c=1; int fun(int x,int y) //递归法判断互质 { if(!y) return x; //y==0 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) //也就是说两个整数的最大公约数为1,即两个正整数互质 { b[j]*=a[i]; break; } if(j-1==c) //意思就是上面的"break"一次都没有执行 b[++c]=a[i]; } printf("%d",c); }
阅读全文
1 0
- 【openjudge】分成互质组
- 【openjudge】分成互质组
- OpenJudge 7384(分成互质组)
- Openjudge小学奥数--7834 分成互质组!
- POJ(7834)-----分成互质组(openjudge)
- [OpenJudge 7834]分成互质组 迭代加深+剪枝
- noi.openjudge 7834题解 分成互质组(分层递归)
- 分成互质组
- 分成互质组
- OpenJudge_P7834 分成互质组
- 7834:分成互质组
- 7834:分成互质组
- OpenJudge
- noi题库—搜索—分成互质组
- C++递归算法之分成互质组
- 网络分成
- [OpenJudge]胡
- OPENJUDGE LIST
- Mongodb安装配置详细图文教程
- quartz
- 如何让创建的eclipse项目支持myeclipse
- pwnable 之echo2
- 面向对象设计原则概述
- 【openjudge】分成互质组
- Java线程同步详解
- Git学习笔记
- DBUUO相关配置代码介绍
- 主流操作系统分类及Linux系统简介
- PAT b1021-b1025题解
- Java实现:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
- oh-my-zsh powerline打造终极shell
- 视频雪花故障检测