分成互质组 (信息学奥赛一本通-T1221)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                分成互质组 (信息学奥赛一本通-T1221)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                【題目描述】
給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?
【輸入】
第一行是一個正整數n。1 ≤ n ≤ 10。
第二行是n個不大于10000的正整數。
【輸出】
一個正整數,即最少需要的組數。
【輸入樣例】
6
 14 20 33 117 143 175
【輸出樣例】
3
【源程序】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define N 20 using namespace std; int n; int a[N]; int cnt=99999; long long vis[N]; long long gcd(long long a,long long b) {if(b==0)return a;returngcd(b,a%b); } void dfs(int k,int step) {if(step==n+1){if(k<cnt)cnt=k;return;}for(int i=1;i<=k;i++)if(gcd(vis[i],a[step])==1){vis[i]*=a[step];dfs(k,step+1);vis[i]/=a[step];}vis[k+1]*=a[step];dfs(k+1,step+1);vis[k+1]/=a[step]; } int main() {int temp;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];vis[i]=1;}sort(a+1,a+1+n);dfs(1,1);cout<<cnt<<endl;return 0; }?
總結
以上是生活随笔為你收集整理的分成互质组 (信息学奥赛一本通-T1221)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 活动选择(信息学奥赛一本通-T1323)
- 下一篇: 数论 —— 线性同余方程
