【发布时间】:2020-02-27 07:04:23
【问题描述】:
我不知道如何打印下十个Perfect numbers。 到目前为止,这是我所得到的:
#include <stdio.h>
int main() {
int n, c = 1, d = 2, sum = 1;
printf("Enter any number \n");
scanf("%d", &n);
printf("The perfect numbers are:");
while(c <= 10) {
sum = 1;
d = 2;
while(d <= n / 2) { //perfect no
if(n % d == 0) {
sum = sum + d;
}
d++;
}
if(sum == n) {
printf("%d\n", n);
}
c++;
}
return 0;
}
我目前收到的输出:
input: 2 (say)
output: 6
我想要什么:
input: 2
output:
6
28
496
8128
33550336
858986905
137438691328
2305843008139952128
2658455991569831744654692615953842176
191561942608236107294793378084303638130997321548169216
我刚刚开始编码。任何帮助将不胜感激。
【问题讨论】:
-
请包括你当前程序的输出和你想要达到的输出。
-
我有。请检查。
-
在第六个条目(858986905 — 9 位)之后会出现(32 位)整数溢出。即使使用 64 位整数(
unsigned long long或uint64_t)也无法处理第八个整数(2305843008139952128 和 21 位)。因此,如果您对此很认真,则需要使用多精度(整数)算术包——其中有很多。 -
见OEIS A000396 - 6,28,496,8128,33550336,8589869056,137438691328,2305843008139952128,2658455991569831744654692615953842176,191561942608236107294793378084303638130997321548169216 跨度>。
-
注:191561942608236107294793378084303638130997321548169216 约为 178 位。
标签: c perfect-numbers