#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define N 500010
int num; //素数的个数
int p[500010];
void fun() //素数打表
{
num = 0;
memset(p, 0, sizeof(p));
int res = sqrt(N * 1.0);
for(int i = 2; i < res; ++i)
{
if(!p[i])
{
for(int j = i * i; j < N; j += i)
p[j] = 1;
}
}
for(int i = 2; i < N; ++i) //存素数表
if(!p[i])
p[num++] = i;
}
int judge(int n) //求n的因子之和
{
int sum, ans, sumall = 1;
for(int i = 0; i < num; ++i)
{
sum = 0;
while(n % p[i] == 0 && n != 1)
{
sum++;
n /= p[i];
}
ans = 0;
for(int j = 0; j <= sum; ++j)
{
ans += pow(p[i] * 1.0, j);
}
sumall *= ans;
if(n == 1)
break;
}
return sumall;
}
int judge2(int n) //判断n的因子个数
{
int sum, sumall = 1;
for(int i = 0; i < num; ++i)
{
sum = 0;
while(n % p[i] == 0 && n != 1)
{
sum++;
n /= p[i];
}
sumall *= (sum + 1);
if(n == 1)
break;
}
return sumall; //因子个数
}
int main()
{
int ncase;
int n;
fun();
scanf("%d", &ncase);
while(ncase--)
{
scanf("%d", &n);
printf("%d的因子个数为:\n%d\n", n, judge2(n));
printf("%d的因子之和为:\n%d\n", n, judge(n));
}
return 0;
}
算数基本定理运用
最新推荐文章于 2022-01-28 18:22:36 发布