约数个数定理
对于一个大于1正整数n可以
分解质因数:
则n的
正约数的个数就是
。
其中a
1、a
2、a
3…a
k是p
1、p
2、p
3,…p
k的指数。
#include <iostream>
#include <cstdio>
#include <cmath>
#define ll long long
using namespace std;
struct node
{
int n;
int num;
};
node prime[200000];
ll isPrime(ll N){
int len = sqrt(N);
int flag = 0;
for(int i=2;i<=len;i++)
{
if(N%i==0)
{
flag =1;
return 0;
}
}
if(!flag)
return 1;
}
void init()
{
int num = 0;
for(int i=2;i<100000;i++)
if(isPrime(i))
prime[num++].n=i;
}
int n_pr(int n)
{
int i, k = 1;
for(i=0; n!= 1;i++)
{
if(n % prime[i].n == 0)
prime[i].num=1;
while(n % prime[i].n == 0)
{
prime[i].num++;
n/=prime[i].n;
}
if(prime[i].num != 0)
k *= prime[i].num;
}
return k;
}
int main()
{
init();
int n, m;
while(~scanf("%d", &n))
{
while(n--)
{
scanf("%d", &m);
for(int i=0;i<m;i++)
prime[i].num=0;
printf("%d ", n_pr(m));
}
printf("\n");
}
return 0;
}
4810

被折叠的 条评论
为什么被折叠?



