方案一:使用for循环
#include<iostream>
#include<algorithm>
using namespace std;
int res=0;
void ac(int s,int m)
{
if(s==1)
{
res++;
return;
}
else
{
for(int i=m;i<=s;i++)
{
if(s%i==0)
{
ac(s/i,i);
}
}
}
}
int main(void)
{
int n,s;
cin >> n;
while(n--)
{
cin >> s;
res = 0;
ac(s,2);
cout<<res<<endl;
}
return 0;
}
方案二:使用递归
#include<iostream>
#include<algorithm>
using namespace std;
int res;
void ac(int m,int div)
{
if(m==1) res+=1;
else if(div==1) return;
else if(m%div==0)
{
ac(m/div,div);
ac(m,div-1);
}
else
{
ac(m,div-1);
}
}
int main(void)
{
int n;
cin >> n;
while(n--)
{
int m;
cin >> m;
res=0;
ac(m,m);
cout << res <<endl;
}
return 0;
}