n= p1 ^ k1 * p2 ^ k2 ……
所有的约数和为 (1 + p1 + p1^2 + .. + p1 ^ k1) * (1 + p2 + p2 ^ 2 + ... + p2 ^ k2) * ...
#include <iostream>
#include <algorithm>
#include "memory.h"
#include <cmath>
#include "stdio.h"
using namespace std;
int p[300];
void Init()
{
p[0] = 1;
int used[300];
memset(used,false,sizeof(used));
for (int i = 2; i < 300; i++)
{
if (!used[i])
{
p[p[0]]= i; p[0]++;
}
for (int j = 1; j < p[0] && i * p[j] < 300; j++)
{
used[i * p[j]] = true;
if (i % p[j] == 0)
break;
}
}
/* for (int i = 1; i < p[0]; i++)
printf("%d ",p[i]);
printf("\n");*/
}
int DengBi(int q,int k)
{
int sum = 0;
int t = 1;
for (int i = 0; i <= k; i++)
{
sum += t;
t *= q;
}
return sum;
}
int GetSum(int k)
{
int sum = 1;
for (int i = 1; i < p[0] && k > 1; i++)
{
int num = 0;
while (k % p[i] == 0)
{
num++;
k /= p[i];
}
sum *= DengBi(p[i],num);
}
return sum;
}
int main()
{
Init();
printf("PERFECTION OUTPUT\n");
int temp;
while (scanf("%d",&temp) != EOF && temp)
{
int sum = GetSum(temp);
sum -= temp;
printf("%5d ",temp);
if (sum == temp)
printf("PERFECT\n");
else if (sum < temp)
printf("DEFICIENT\n");
else
printf("ABUNDANT\n");
}
printf("END OF OUTPUT\n");
return 0;
}