回溯法 百炼2749:分解因数
2012-05-07 13:16
537 查看
2749:分解因数
ViewSubmit
Statistics
Clarify
Time Limit:
1000ms
Memory Limit:
65536kB
Description
给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,问这样的分解的种数有多少。注意到a = a也是一种分解。
Input
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a (1 < a < 32768)
Output
n行,每行输出对应一个输入。输出应是一个正整数,指明满足要求的分解的种数
Sample Input
2 2 20
Sample Output
1 4
View
Submit
Statistics
Clarify
#include<stdio.h>
#include<iostream>
using namespace std;
int a;
int res;
int sum;
void dfs(int cnt){
if(cnt*sum==a){res++; return;}
if(cnt*sum<a){
sum*=cnt;
int j=a/sum;
for(int i=cnt;i<=j;i++)
dfs(i);
sum/=cnt;
return;
}
}
int main(){
int nCases;
scanf("%d",&nCases);
for(int i=0;i<nCases;i++){
scanf("%d",&a);
res=0; sum=1;
for(int i=2;i<=a;i++) dfs(i);
printf("%d\n",res);
}
return 0;
}
#include<stdio.h>
int decomposition(int m,int k){
int res=1;
for(int i=k;i*i<=m;i++){
if(m%i==0&&m/i>=i){
//printf("%d ",i);
res+=decomposition(m/i,i);
}
}//printf("\n");
return res;
}
int main(){
int n;
while(scanf("%d",&n)==1){
for(int i=0;i<n;i++){
int m;
scanf("%d",&m);
printf("%d\n",decomposition(m,2));
}
}
return 0;
}
相关文章推荐
- 百炼-2749-分解因数-C语言-递归算法
- 百炼-2749-分解因数-C语言-递归算法
- 百练 2749: 分解因数
- OpenJudge 2749 分解因数
- 2749:分解因数
- 百练2749:分解因数
- 2749:分解因数
- poj之2749分解因数
- LightOJ-1138 Trailing Zeroes (III) 唯一分解定理 算n!的某个因数个数
- 分解正整数成质因数
- poj 2649 Factovisors 对n!进行因数分解
- ZOJ-3673-1729【数论】【分解质因数】【DFS】【好题】
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- Java 小例子:分解质因数
- 洛谷 1414 数论 分解因数 水题
- 将整数分解成若干个质因数.
- 将一个正整数分解质因数,输入90,打印出90=2*3*3*5
- 分解因数
- 数论概论笔记 第7章 因数分解与算数基本定理