标签:end 多少 main out 内存 log find 一个 并且
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1200
给出一个正整数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;; } }
标签:end 多少 main out 内存 log find 一个 并且
原文地址:http://www.cnblogs.com/EdSheeran/p/7626874.html