一个数n 可以分解成n=p1^a1 * p2 ^a2 … pn ^ an
又因为其他定理可得 p1^a1 约数有a1+1 个
所以 n的 约数有 (a1+1)+(a2+2)+…+(an+n)个
下面呈上求n的约数的个数的代码
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>
typedef long long ll;
using namespace std;
ll yinzi(ll a)
{
ll ans=1;
for(ll i=2; i*i<=a; i++)
{
ll k=0;
while(a%i == 0)
{
a = a/i;
k++;
}
if(k!=0)
ans *= (k+1);
}
if(a != 1)
ans=ans*2;
if(ans==1)
{
if(a==1)
return 1;
else
return 2;
}
return ans;
}
int main()
{
ll a,b,c;
while(1)
{
cin >> a;
if(a==0)
break;
else
{
c=yinzi(a);
}
cout << c << endl;
}
}