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