用C++求2-10000内所有完全数(完全数的定义为所有因子之和等于本身的数)

[复制链接]
查看11 | 回复0 | 2007-5-19 20:50:06 | 显示全部楼层 |阅读模式
#include #include using namespace std;class PrimeClass{
public:
PrimeClass();
long sumOfDivisor(int num);
private:
int primeLen;
int prime[5000];};int main(){
PrimeClass tPrime;
long tNumber;
cout << "Perfect numbers between 2 and 10000 are following:\n";
for (tNumber = 2; tNumber < 10000; tNumber ++)
if (tNumber == tPrime.sumOfDivisor(tNumber))
cout << tNumber << endl;
system("pause");
return 0;}PrimeClass::PrimeClass():primeLen(0){
int i, j;
bool isPrime;
for (i = 2; i <= 100; i ++)
{
isPrime = true;
for (j = 0; j < primeLen; j ++)
if (i % prime[j] == 0)
{
isPrime = false;
break;
}
if (isPrime) prime[primeLen++] = i;
}}long PrimeClass::sumOfDivisor(int num){
int i;
long ansSum = 1, curSum, tNum = num;
for (i = 0; i < primeLen && prime * prime <= tNum; i ++)
if (tNum % prime == 0)
{
curSum = 1;
while (tNum % prime == 0)
{
tNum /= prime;
curSum = curSum * prime + 1;
}
ansSum *= curSum;
}
if (num != 1) ansSum *= (tNum + 1);
return (ansSum - num);}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行