Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Suma dzielników

Ostatnio zmodyfikowano 2016-03-10 11:56
Autor Wiadomość
skibixd
Temat założony przez niniejszego użytkownika
» 2016-03-10 10:05:56
C/C++
#include <iostream>

using namespace std;

int main()
{
    {
        int * tab;
        int N, i, suma;
        cin >> N;
        tab = new int[ N ];
       
        for( i = 0; i < N; ++i )
       
        {
            suma = 0;
            cin >> tab[ i ];
            for( int j = 1; j <= tab[ i ]; j++ ) {
                if(( tab[ i ] % j ) == 0 ) {
                    suma = suma + j; }
               
            }
            cout << "SUMA: " << suma << endl;
        }
       
        //cout<<"zawartosc tablicy";
        // for(i=0;i<N;++i) cout<<tab[i]<<" ";
       
       
        delete[] tab;
        return 0;
    }
   
}

Np. przy 6 suma dzielników według kodu wynosi 12, a nie 6. Dlatego, że liczbę 6 bierze jako dzielnik 6 i dodaje. Nie powinno tak być.
Trzeba kazać programowi omijać ostatnią liczbę.
W zadaniu chodzi o naturalne dzielniki włąściwe, przepraszam, że nie sprecyzowałem na początku.
P-145834
carlosmay
» 2016-03-10 10:11:07
Np. przy 6 suma dzielników według kodu wynosi 12, a nie 6. Dlatego, że liczbę 6 bierze jako dzielnik 6 i dodaje.
6 też jest dzielnikiem liczby 6.
P-145835
skibixd
Temat założony przez niniejszego użytkownika
» 2016-03-10 10:11:49
Naturalne dzielniki wlasciwe.
P-145836
carlosmay
» 2016-03-10 10:23:56
Naturalne dzielniki wlasciwe.
Czyli?

Jeśli program ma pominąć dzielniki trywialne, to je pomiń.
Wtedy też suma dzielników liczby 6 nie będzie 6, tylko 5.
P-145837
skibixd
Temat założony przez niniejszego użytkownika
» 2016-03-10 10:31:06


Liczba doskonała jest liczbą naturalną, która jest równa sumie wszystkich swoich naturalnych dzielników właściwych.

    6 = 1 + 2 + 3
    28 = 1 + 2 + 4 + 7 + 14
P-145838
carlosmay
» 2016-03-10 10:39:11
Pierwsza poprawka reguluje dzielenie przez samą
siebie.

Liczba doskonała
Warto by dodać warunek sprawdzający, czy liczba jest doskonałą.
P-145839
mokrowski
» 2016-03-10 11:56:45
Co do błędu w samym kodzie i w trybie tzw. "minimalnych poprawek" to..
C/C++
#include <iostream>

using namespace std;

int main()
{
    {
        int * tab;
        int N, i, suma = 0;
        cin >> N;
        tab = new int[ N ];
       
        for( i = 0; i < N; ++i )
        {
            cin >> tab[ i ];
            // XXX: Tu dodano zerowanie sumy. Pod uwagę
            // były brane śmiecie z poprzedniego obiegu pętli.
            suma = 0;
            // XXX: Tu dodano 1 do tab[i] bo chcesz
            // podjąć próbę dzielenia przez samą liczbę.
            for( int j = 1; j < tab[ i ] + 1; j++ ) {
                if(( tab[ i ] % j ) == 0 )
                     suma = suma + j;
               
            }
            cout << "SUMA: " << suma << endl;
        }
       
        delete[] tab;
        return 0;
    }
}
A nad brakiem optymalności tego algorytmu i logiką kodu nie będę się pastwił chyba że wyraźnie poprosisz.
P-145843
1 « 2 »
Poprzednia strona Strona 2 z 2