分成互質組
阿新 • • 發佈:2017-10-05
pan ble mes enter clu php div size cstring
時間限制: 1000 ms 內存限制: 65536 KB
分成互質組
鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1221
時間限制: 1000 ms 內存限制: 65536 KB
【題目描述】
給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?
【輸入】
第一行是一個正整數n。1 <= n <= 10。
第二行是n個不大於10000的正整數。
【輸出】
一個正整數,即最少需要的組數。
【輸入樣例】
6 14 20 33 117 143 175
【輸出樣例】
3
題解:一組中的數兩兩互質,則任意一個數與其中兩數的積互質
#include<iostream> #include<cstdio> #include<cstring> using namespace std; long long f[11]; int n,minn=10,a[11]; long long gcd(long long a,long long b) { if(!b)return a; return gcd(b,a%b); } void s(int i,int k){ if(i==n+1) { if(k<minn)minn=k; return ; } for(int j=1;j<=k;j++) {if(gcd(f[j],a[i])==1) { f[j]*=a[i]; s(i+1,k); f[j]/=a[i]; } } f[k+1]=a[i]; s(i+1,k+1); f[k+1]=0; } int main(){ cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<11;i++)f[i]=1; s(1,1); cout<<minn<<endl; }
分成互質組