nie mam pojęcia jak mogę spełnić warunek "Trzy różne" mój program sprawdza czy ma 3 czynniki pierwsze, ale nie czy są różne
Kontenerem który umożliwia "gromadzenie unikalnych wartości" jest std::set. Jeśli dodasz do niego dzielniki, na końcu możesz sprawdzić .size(). Jeśli zwróci 3, tzn. że są unikalne 3 wartości.
Test czy liczba jest pierwsza możesz przeprowadzić bez konsumpcji dużej ilości pamięci tak:
bool isPrime(int num) {
if (num <= 3) {
return num > 1;
} else if ((num % 2 == 0) || (num % 3 == 0)) {
return false;
} else {
for (int i = 5; i * i <= num; i += 6) {
if ((num % i == 0) || (num % (i + 2) == 0)) {
return false;
}
}
return true;
}
}
Można oczywiście iterować do pierwiastka. Niemniej jednak mnożenie jest szybsze dla liczb które nie są float. Kompilator jednak sam się zorientuje że wartość jest stała.
Informacja że czynnik jest nieparzysty, sugeruje krok sprawdzania 2 od wartości nieparzystej.
Masz trochę "niezgrabności" w obsłudze pliku..