Problem z algorytmem - liczby doskonałe

0

Mam do napisania algorytm wypisujący cztery pierwsze liczby doskonałe. Nie wiem, dlaczego program po uruchomieniu wypisuje 2 i 3. Czy ktoś mógłby powiedzieć mi, gdzie zrobiłem błąd?

#include <iostream>

using namespace std;

bool czy_doskonala(int l){
    int s = 1;
    for (int i = 2; i <= l/2;l++){
        if(l % i == 0)
            s+=i;
        if ( s==l)
            return true;
        return false;
    }
}

int main()
{
   for( int i = 1; i < 10000; i++){
        if (czy_doskonala(i)){
        cout<<i<<endl;}
    }

        return 0;
    
}
1

Liczba doskonała – liczba naturalna, która jest sumą wszystkich swych dzielników właściwych

https://pl.wikipedia.org/wiki/Liczba_doskona%C5%82a
WSZYSTKICH, natomiast twój algorytm, nawet po uporządkowaniu, będzie dawał "false positive'y" - zwróci, true gdy suma dzielników będzie równa liczbie, a mogą to być nie wszystkie dzielniki. Uporządkuj i sprawdź, np., dla, 24, (ma sporo dzielników :) )

0
Boxwood napisał(a):
bool czy_doskonala(int l){
    int s = 1;
    for (int i = 2; i <= l/2;l++){

Inkrementujesz l zamiast i.

        if ( s==l)
            return true;
        return false;

To sprawdzenie można dać na zewnątrz pętli (po zsumowaniu wszystkich dzielników).

1 użytkowników online, w tym zalogowanych: 0, gości: 1