我正在尝试用 C 编写一个代码,该代码允许在数组中最多输入 10 个元素(自然数),识别数组中的所有完美数字,并对所有非完美数字进行乘积。
Euclid 证明了 2^{p−1}(2^p−1) 是一个偶数,只要 2^p−1 是素数(Euclid,Prop. IX.36)。例如,前四个完美数由公式 2^{p−1}(2^p−1) 生成,具有 pa 素数,如下: 对于 p = 2: 2^1(2^2−1 ) = 6 对于 p = 3:2^2(2^3−1) = 28 对于 p = 5:2^4(2^5−1) = 496 对于 p = 7:2^6(2^7− 1) = 8128。(来源:维基百科)
当我编译程序时,我得到了三次或多次重复的完美数声明。
例如:
... t[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 6}
“6”是一个完美的数字。“6”是一个完美的数字。“6”是一个完美的数字。...
我也得到了一个奇怪的产品。
例如:
... t[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 28}
“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。“28”是一个完美的数字。...非完美数字的乘积是-1677721600
我对c真的很陌生,我似乎无法弄清楚我做错了什么,但我也不会讲义。一些指导将不胜感激。
#include <stdio.h>
#define MAX_BOUND 9 /*Array's bound*/
main() {
int i, /*array index*/
t[i],
d, /*divider*/
sum, /*result for perfect number validation*/
product; /*product of all non-perfect number in array*/
i = 0;
printf("Enter your natural numbers. \n");
for (i = 0; i <= MAX_BOUND; i++) {
printf("Number %d : ", i + 1);
scanf( "%d", &t[i]);
}
i = 0;
product = 1;
for (i = 0; i <= MAX_BOUND; i++) {
d = 1;
sum = 0;
while(d < t[i]) {
if(t[i]%d == 0)
sum = sum + d;
d++;
if(sum == t[i])
printf("%d is a perfect number. \n", t[i]);
else
product = product * t[i];
}
}
printf("The product of the non-perfect numbers is %d \n", product);
getch();
}