Идеальное число после 28

#c #loops #perfect-numbers

#c #циклы #совершенные числа

Вопрос:

Я написал простую программу, чтобы найти идеальное число, которое находится сразу после 28 (то есть 496), однако оно не работает. Не уверен, что я делаю неправильно.

 #include <stdio.h>

int main(){

    int num=29, sum=0, aux=1;

    while(aux!=0){
        for(int i=1; i<num; i  ){
            if(!(num%i)){
                sum =i;
            }
        }

        if(sum == num){
            printf("%d", sum);
            aux=0;
        }else{
            num  ;
        }
    }

    return 0;
}
 

Комментарии:

1. Не использование отладчика было вашей первой ошибкой.

2. Вместо for(int i=1; i<num; i ){ . код будет выполняться намного быстрее с for(int i=1; i<=num/i; i ){ .

Ответ №1:

Вы должны инициализировать sum перед каждой проверкой.

     while(aux!=0){
        sum = 0; /* add this */
        for(int i=1; i<num; i  ){
 

Ответ №2:

Вы должны были инициализировать значение sum внутри цикла while, потому что его значение не сбрасывается на 0 после проверки числа, и оно продолжает увеличивать более позднее значение, так что в конечном итоге это приведет к ошибке.