I'm trying to write a code in C which would allow a maximum input of 10 elements (natural numbers) in an array, identify all perfect numbers in the array, and do the product of all non-perfect numbers.
Euclid proved that 2^{p−1}(2^p−1) is an even perfect number whenever 2^p−1 is prime (Euclid, Prop. IX.36). For example, the first four perfect numbers are generated by the formula 2^{p−1}(2^p−1), with p a prime number, as follows: for p = 2: 2^1(2^2−1) = 6 for p = 3: 2^2(2^3−1) = 28 for p = 5: 2^4(2^5−1) = 496 for p = 7: 2^6(2^7−1) = 8128. (source: wikipedia)
When I compile the program, I get a triplicate or higher repetition of declaration of the perfect number.
e.g.:
... t[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 6}
'6' is a perfect number. '6' is a perfect number. '6' is a perfect number. ...
I also get a weird products.
e.g.:
... t[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 28}
'28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. '28' is a perfect number. ... The product of the non-perfect numbers is -1677721600
I'm really new to c, I can't seem to figure out what I'm doing wrong, but I wouldn't an handout either. Some guidance would be much appreciated.
#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();
}