分解因数
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1200
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
给出一个正整数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<iostream> #include<cstdio> #include<cstring> using namespace std; int f[40000],a[40000]; int k=0; int prime(){ for(int i=2;i<40000;i++) for(int j=i+i;j<40000;j+=i) a[j]=1; } void find(int n,int m){ if(n==1){ k++;return; } for(int i=m;i<=n;i++) if(n%i==0)find(n/i,i); } int main(){ int t; cin>>t; prime(); for(int i=1;i<1000;i++)f[i]=1; while(t--) { int n; k=0; cin>>n; find(n,2); cout<<k<<endl;; } }