1. 程式人生 > >分成互質組

分成互質組

pan ble mes enter clu php div size cstring

分成互質組

鏈接: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; }

分成互質組