信息学奥赛一本通(1221:分成互质组)
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通(1221:分成互质组)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1221:分成互質組
時間限制: 1000 ms ??? ??? 內存限制: 65536 KB
提交數: 7405 ??? 通過數: 3453
【題目描述】
給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?
【輸入】
第一行是一個正整數n。1 <= n <= 10。
第二行是n個不大于10000的正整數。
【輸出】
一個正整數,即最少需要的組數。
【輸入樣例】
6 14 20 33 117 143 175【輸出樣例】
3【分析】
? ? ? ? 這道題沒有必要放到dfs中,直接枚舉即可,n個數,逐一枚舉,比較其后所有元素,是否是同質,如果是互質,gcd(a[i],a[j])==1,則加入組中。
【參考代碼】
#include<stdio.h> #define N 15 int a[N]; //存數數組 int vis[N]; //訪問數組 int cnt; //分組數int gcd(int a,int b) {return a%b==0 ? b : gcd(b,a%b); }int main() {int i,j,n;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++){if(!vis[i]){vis[i]=1;cnt++;for(j=i+1;j<n;j++) {if(!vis[j] && gcd(a[i],a[j])==1) //未訪問且互質,添加進組 {a[i]*=a[j]; //2,3互質,再判斷就需要和6互質vis[j]=1;}}}}printf("%d\n",cnt);return 0; }http://ybt.ssoier.cn:8088/problem_show.php?pid=1221
?
總結
以上是生活随笔為你收集整理的信息学奥赛一本通(1221:分成互质组)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1208:2的幂次方表
- 下一篇: 高精度计算模板