如果有一个正整数N,能被2520整除,则N就是完美数。现有一个非常大的正整数M,最高位为1,其余均为0,请计算在[1,M]范围内有多少个完美数 C++程序
时间: 2023-12-22 22:03:52 浏览: 113
以下是使用C++编写的程序,实现了上述算法:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
long long M = 1000000000000;
long long count_divisible(int n) {
long long m = (M / n) * n;
if (m == 0) {
return 0;
} else {
long long k = m / n;
return k + count_divisible(n * 2) - count_divisible(n * 3) + count_special(n, k);
}
}
long long count_special(int n, long long k) {
if (n == 2 || n == 5) {
return 0;
} else if (n == 3) {
return k / 3;
} else if (n == 7) {
return k / 7 + count_special(49, k);
} else if (n == 49) {
return k / 49 + count_special(343, k);
} else if (n == 343) {
return k / 343;
}
}
int main() {
long long result = count_divisible(1) * count_divisible(2) * count_divisible(3) * count_divisible(5) * count_divisible(7);
cout << result << endl;
return 0;
}
```
注意在计算过程中需要使用long long类型,否则会出现精度丢失的问题。
阅读全文