Odpowiedź :
Odpowiedź
W pierwszych dwóch załącznikach znajdziesz program, który napisałam. Program dokonuje rozkładu na czynniki pierwsze, a następnie sprawdza których z nich jest nieparzysta liczba.
Do przechowywania informacji o czynnikach pierwszych i ich wielokrotności służy słownik (mapa, tablica asocjacyjna, tablica skojarzeniowa) jej_rozkład. Kluczami są dzielniki pierwsze, a wartościami wielokrotności (ile razy dana liczba pierwsza jest dzielnikiem).
W trzecim załączniku wyniki przykładowych uruchomień.
Wyjaśnienie
Nie wiedziałam czy napisać funkcję aby uniknąć powtarzania dokładnie takiego samego kodu. Nie wiem jak jesteś oceniana...
Jedyna sztuczka w tym programie znajduje się w przedostatnim wierszu (wiersz 81). Dzięki temu, że pierwsza liczba jest typu long long i jest ona mnożona przez liczbę typu int, to wyniki są automatycznie typu long long, ponieważ druga liczba (w tym przypadku n) jest automatycznie promowana do typu long long przed wykonaniem mnożenia. Użycie liczb całkowitych typu long long jest konieczne, ponieważ wyniki nie mieszczą się w zakresie liczb int (INT_MAX = 2147483647). Wiersz 81. nie jest konieczny ponieważ można by od razu wypisać wynik mnożenia, jednak treść zadania nakazuje użycie zmiennej m jako wyniku działania programu.
Nie napisałaś nic o środowisku (programie), którego używasz do pisania kodu w C++. Przetestowałam w Visual Studio oraz używając serwisu replit. Jeśli używasz na przykład Code::Blocks lub Dev-C++, to nazwy zmiennych muszą w takim przypadku być bez polskich liter.
Podany na początku zadania limit pamięci wynika zapewne z oczekiwania, że najpierw będzie utworzona tablica liczb pierwszych od 2 do 499 999 999, bo takich liczb pierwszych jest dokładnie 26 355 867. Jeśli program rzeczywiście miałby takie wymaganie, że musi być najpierw stworzona tablica liczb pierwszych, to napisz nowe zadanie i napisz o tym wymaganiu w treści zadania.