#include <stdio.h>
#include <math.h>
// 判断是否为素数的函数
int is_prime(unsigned long long n) {
if (n <= 1) return 0;
if (n == 2) return 1;
if (n % 2 == 0) return 0;
unsigned long long limit
= (unsigned long long)sqrt(n
) + 1; for (unsigned long long i = 3; i <= limit; i += 2) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
const unsigned long long limit = 10000000000; // 上限1亿
unsigned long long perfect_count = 0;
// 已知完美数对应的素数p列表
int primes[] = {2, 3, 5, 7, 13, 17, 19, 31};
int num_primes = sizeof(primes) / sizeof(primes[0]);
printf("在0~%llu范围内的完美数有:\n", limit
);
for (int i = 0; i < num_primes; i++) {
int p = primes[i];
// 计算梅森素数:2^p - 1
unsigned long long mersenne = (1ULL << p) - 1;
// 计算对应的完美数:(2^(p-1)) * (2^p - 1)
unsigned long long perfect_number = (1ULL << (p - 1)) * mersenne;
// 检查完美数是否超过上限
if (perfect_number > limit) {
break;
}
// 检查梅森数是否为素数
if (is_prime(mersenne)) {
printf("%llu\n", perfect_number
); perfect_count++;
}
}
printf("共找到%llu个完美数\n", perfect_count
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgovLyDliKTmlq3mmK/lkKbkuLrntKDmlbDnmoTlh73mlbAKaW50IGlzX3ByaW1lKHVuc2lnbmVkIGxvbmcgbG9uZyBuKSB7CiAgICBpZiAobiA8PSAxKSByZXR1cm4gMDsKICAgIGlmIChuID09IDIpIHJldHVybiAxOwogICAgaWYgKG4gJSAyID09IDApIHJldHVybiAwOwogICAgCiAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGltaXQgPSAodW5zaWduZWQgbG9uZyBsb25nKXNxcnQobikgKyAxOwogICAgZm9yICh1bnNpZ25lZCBsb25nIGxvbmcgaSA9IDM7IGkgPD0gbGltaXQ7IGkgKz0gMikgewogICAgICAgIGlmIChuICUgaSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCA9IDEwMDAwMDAwMDAwOyAvLyDkuIrpmZAx5Lq/CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgcGVyZmVjdF9jb3VudCA9IDA7CiAgICAKICAgIC8vIOW3suefpeWujOe+juaVsOWvueW6lOeahOe0oOaVsHDliJfooagKICAgIGludCBwcmltZXNbXSA9IHsyLCAzLCA1LCA3LCAxMywgMTcsIDE5LCAzMX07CiAgICBpbnQgbnVtX3ByaW1lcyA9IHNpemVvZihwcmltZXMpIC8gc2l6ZW9mKHByaW1lc1swXSk7CgogICAgcHJpbnRmKCLlnKgwfiVsbHXojIPlm7TlhoXnmoTlroznvo7mlbDmnInvvJpcbiIsIGxpbWl0KTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1fcHJpbWVzOyBpKyspIHsKICAgICAgICBpbnQgcCA9IHByaW1lc1tpXTsKICAgICAgICAvLyDorqHnrpfmooXmo67ntKDmlbDvvJoyXnAgLSAxCiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG1lcnNlbm5lID0gKDFVTEwgPDwgcCkgLSAxOwogICAgICAgIAogICAgICAgIC8vIOiuoeeul+WvueW6lOeahOWujOe+juaVsO+8migyXihwLTEpKSAqICgyXnAgLSAxKQogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBwZXJmZWN0X251bWJlciA9ICgxVUxMIDw8IChwIC0gMSkpICogbWVyc2VubmU7CiAgICAgICAgCiAgICAgICAgLy8g5qOA5p+l5a6M576O5pWw5piv5ZCm6LaF6L+H5LiK6ZmQCiAgICAgICAgaWYgKHBlcmZlY3RfbnVtYmVyID4gbGltaXQpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIOajgOafpeaiheajruaVsOaYr+WQpuS4uue0oOaVsAogICAgICAgIGlmIChpc19wcmltZShtZXJzZW5uZSkpIHsKICAgICAgICAgICAgcHJpbnRmKCIlbGx1XG4iLCBwZXJmZWN0X251bWJlcik7CiAgICAgICAgICAgIHBlcmZlY3RfY291bnQrKzsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHByaW50Zigi5YWx5om+5YiwJWxsdeS4quWujOe+juaVsFxuIiwgcGVyZmVjdF9jb3VudCk7CiAgICByZXR1cm4gMDsKfQ==