1. 程式人生 > >1751:分解因數

1751:分解因數

總時間限制: 
1000ms 
記憶體限制: 
65536kB
描述
給出一個正整數a,要求分解成若干個正整數的乘積,即a = a1 * a2 * a3 * ... * an,並且1 < a1 <= a2 <= a3 <= ... <= an,問這樣的分解的種數有多少。注意到a = a也是一種分解。
輸入
第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個正整數a (1 < a < 32768)
輸出
n行,每行輸出對應一個輸入。輸出應是一個正整數,指明滿足要求的分解的種數
樣例輸入
2
2
20
樣例輸出
1
4

【題解一】

#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int factor(int a,int b) {
	int cnt=0;
	if(a==1)
		return 1;
	for(int i=b; i<=a; i++)if(a%i==0) {
			cnt+=factor(a/i,i);
		}
	return cnt;
}
int main() {
	int n,a;
	scanf("%d",&n);
	for(int i=0; i<n; i++) {
		scanf("%d",&a);
		printf("%d\n",factor(a,2));
	}
	return 0;
}

【題解二】
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int factor(int a,int b) {
	int cnt=0;
	if(a==1)
		return 1;
	for(int i=b; i<=a; i++)if(a%i==0) {
			cnt+=factor(a/i,i);
		}
	return cnt;
}
int main() {
	int n,a;
	scanf("%d",&n);
	for(int i=0; i<n; i++) {
		scanf("%d",&a);
		printf("%d\n",factor(a,2));
	}
	return 0;
}