Suma dzielników początkowych 100 liczb

0

np . dzielnikami 4 są 2 i 1 a ich suma to 3 a właściwie u mnie to 2 (program jest przeznaczoony do liczenia wszystkich liczb skojarzonych dlatego nie uwzględniam 1 i liczby czyli 4 [trwa budowanie programu] )
PROBLEM jest taki, dlaczego wyświetla mi 3 od końca jakąś dziwną liczbe ,tj. ujemną; --> http://uploads.im/OvY7L.png

#include <iostream>

int main()
{

    long long suma = 0, sumaWynikowa[100];
    int zmienna = 0;

    for (int i = 2; i < 100; ++i) {
        for (int j = 2; j < 100; ++j) {
            if (i == j)
                continue;
            if (i % j == 0) {
                suma += j;
            }
            if (j == 99) {
                sumaWynikowa[zmienna] = suma;
                ++zmienna;
                suma = 0;
            }
        }
    }

    for (int k = 0; k < 99; ++k) {
        std::cout << sumaWynikowa[k] << ",";
    }

    return 0;
}
 
3
sumaWynikowa[98]

ta tablica ma tylko 98 elementów o indeksach od 0 do 97, a Ty wypisujesz również indeksy 98, 99

for (int k = 0; k < 100; ++k)

To jest undefined behaviour (UB), czyli program może się zachowywać tak jak chce, włącznie z wywaleniem.

Poza tym tablica nie została zainicjalizowana, więc jeśli jakaś komórka nie dostała wartości, to odwołanie się do niej to również UB.

Ta ostatnia pętla powinna być

for (int k = 0; k < zmienna; ++k)

Swoją drogą nazwij swoje zmienne sensownie, bo zmienna nic nie mówi o tym do czego służy.

1

Ale wiesz, że nie musisz iterować po wszystkich liczbach? Wystarczy, że policzysz ile jest liczb podzielnych przez 2, 3, 4...50 i zsumujesz dzielniki pomnożone przez liczbę wystąpień.

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