C++遞歸算法之分成互質組

分成互質組


Description

給定n個正整數,將它們分組,使得每組中任意兩個數互質。至少要分成多少個組?

Input

第一行是一個正整數n1 <= n <= 10
第二行是
n個不大於10000的正整數。

Output

一個正整數,即最少需要的組數。

Sample Input

6
14 20 33 117 143 175

Sample Output

3

代碼

以下是敝人以自己的拙見寫出的辣雞代碼:
#include<cstdio>
#include<cstring>
int n,a[20],b[20],c=1;
int fun(int x,int y) //遞歸法判斷互質
{
	if(!y) return x;
	return fun(y,x%y);
}
int main()
{
	memset(b,1,sizeof(b)); //以便於"b[j]*=a[i];"
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	b[1]=a[1];
	for(int i=2;i<=n;i++)
	{
		int j;
		for(j=1;j<=c;j++)
			if(fun(a[i],b[j])==1)
			{
				b[j]*=a[i];
				break;
			}
		if(j-1==c) //意思就是上面的"break"一次都沒有執行
			b[++c]=a[i];
	}
	printf("%d",c);
}


發佈了89 篇原創文章 · 獲贊 120 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章