#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 = 100000000; // 上限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/lkKbkuLrntKDmlbDnmoTlh73mlbAKaW50IGlzX3ByaW1lKHVuc2lnbmVkIGxvbmcgbG9uZyBuKSB7CiAgICBpZiAobiA8PSAxKSByZXR1cm4gMDsKICAgIGlmIChuID09IDIpIHJldHVybiAxOwogICAgaWYgKG4gJSAyID09IDApIHJldHVybiAwOwogICAgCiAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGltaXQgPSAodW5zaWduZWQgbG9uZyBsb25nKXNxcnQobikgKyAxOwogICAgZm9yICh1bnNpZ25lZCBsb25nIGxvbmcgaSA9IDM7IGkgPD0gbGltaXQ7IGkgKz0gMikgewogICAgICAgIGlmIChuICUgaSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAxOwp9CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBsaW1pdCA9IDEwMDAwMDAwMDsgLy8g5LiK6ZmQMeS6vwogICAgdW5zaWduZWQgbG9uZyBsb25nIHBlcmZlY3RfY291bnQgPSAwOwogICAgCiAgICAvLyDlt7Lnn6Xlroznvo7mlbDlr7nlupTnmoTntKDmlbBw5YiX6KGoCiAgICBpbnQgcHJpbWVzW10gPSB7MiwgMywgNSwgNywgMTMsIDE3LCAxOSwgMzF9OwogICAgaW50IG51bV9wcmltZXMgPSBzaXplb2YocHJpbWVzKSAvIHNpemVvZihwcmltZXNbMF0pOwoKICAgIHByaW50Zigi5ZyoMH4lbGx16IyD5Zu05YaF55qE5a6M576O5pWw5pyJ77yaXG4iLCBsaW1pdCk7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3ByaW1lczsgaSsrKSB7CiAgICAgICAgaW50IHAgPSBwcmltZXNbaV07CiAgICAgICAgLy8g6K6h566X5qKF5qOu57Sg5pWw77yaMl5wIC0gMQogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtZXJzZW5uZSA9ICgxVUxMIDw8IHApIC0gMTsKICAgICAgICAKICAgICAgICAvLyDorqHnrpflr7nlupTnmoTlroznvo7mlbDvvJooMl4ocC0xKSkgKiAoMl5wIC0gMSkKICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcGVyZmVjdF9udW1iZXIgPSAoMVVMTCA8PCAocCAtIDEpKSAqIG1lcnNlbm5lOwogICAgICAgIAogICAgICAgIC8vIOajgOafpeWujOe+juaVsOaYr+WQpui2hei/h+S4iumZkAogICAgICAgIGlmIChwZXJmZWN0X251bWJlciA+IGxpbWl0KSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyDmo4Dmn6XmooXmo67mlbDmmK/lkKbkuLrntKDmlbAKICAgICAgICBpZiAoaXNfcHJpbWUobWVyc2VubmUpKSB7CiAgICAgICAgICAgIHByaW50ZigiJWxsdVxuIiwgcGVyZmVjdF9udW1iZXIpOwogICAgICAgICAgICBwZXJmZWN0X2NvdW50Kys7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwcmludGYoIuWFseaJvuWIsCVsbHXkuKrlroznvo7mlbBcbiIsIHBlcmZlY3RfY291bnQpOwogICAgcmV0dXJuIDA7Cn0=