0

I don't understand why this program doesn't give any output. I just can't see the bug. This is a program to find every perfect number between 1 and 1000. Please help me find the bug. Thanks.

#include <stdio.h>

int main(){
    int number=1, i, sum=0;

    while(number<=1000){

        for(i=1; i<number; i++){
            if(number%i==0){
                sum+=i;
            }
        }

        if(sum==number){
            printf("%d is perfect\n", numero);
        }
        number++;
    }

    return 0;   
}
J...S
  • 5,079
  • 1
  • 20
  • 35
user10198594
  • 79
  • 1
  • 1
  • 6

4 Answers4

1

As already said, you have to reset the sum to zero at the beginning of the loop.
You also have to replace numero with number (typo).
And to go further, I suggest you to use a for loop instead the while loop, which I find more readable IMHO. The inner for loop can also stop when i <= number/2 to optimize a bit. Here is my suggestion of code:

#include <stdio.h>

int main(){

    int sum;

    for(int number = 1;number <= 1000; number++){
        sum = 0;

        for (int i = 1; i <= number/2; i++){
            if (number % i == 0){
                sum += i;
            }
        }

        if (sum == number){
            printf("%d is perfect\n", number);
        }
    }

    return 0;
}

Output:

6 is perfect
28 is perfect
496 is perfect
Laurent H.
  • 6,316
  • 1
  • 18
  • 40
0

You did not reset the sum in the loop:

#include <stdio.h>

int main(){
    int number=1;

    while(number<=1000){
        int i, sum=0;

        for(i=1; i<number; i++){
            if(number%i==0){
                sum+=i;
            }
        }

        if(sum==number){
            printf("%d is perfect\n", numero);
        }
        number++;
    }

    return 0;

}

for the record, according to Wikipedia:

In number theory, a perfect number is a positive integer that is equal to the sum of its proper positive divisors, that is, the sum of its positive divisors excluding the number itself (also known as its aliquot sum). Equivalently, a perfect number is a number that is half the sum of all of its positive divisors (including itself) i.e. σ1(n) = 2n.

goutnet
  • 427
  • 3
  • 10
0

There are 3 perfect numbers between 1 and 1000.

{6, 28, 496}

Your code is mostly correct but you forgot to reset the sum value after each loop iteration.

 ...
    }
    number++;
    sum = 0; // set sum to zero at the end of the while loop
  }

And also you misspelled the number variable as numero inside printf function.

printf("%d is perfect\n", numero);
0
#include <stdio.h>

int main(){

    int number = 1, sum = 0;

    while(number<=1000){

        sum = 0;
        for(int i = 1; i < number; i++){

            if(number % i == 0){
                sum += i;
            }
        }

        if(sum == number){
            printf("%d is perfect\n", number);
        }
        number++;
    }
    return 0;
}

reset the value of sum to 0 and change numero to number in printf

Akshay
  • 89
  • 1
  • 11