C++

Kwadrat

Limit pamięci: 128 MB

Dana jest liczba naturalna n. Znajdź najmniejszą wielokrotność liczby n , która jest kwadratem liczby naturalnej.


Wejście

Pierwszy i jedyny wiersz wejścia zawiera jedną liczbę naturalną n(1< n < 500 000 000).


Wyjście

Pierwszy i jedyny wiersz wyjścia powinien zawierać najmniejszą liczbę naturalną m będącą wielokrotnością liczby n i zarazem będącą kwadratem liczby naturalnej.


Przykład

Dla danych wejściowych:


24

poprawną odpowiedzią jest:


144

natomiast dla danych wejściowych:


9851900

poprawnym wynikiem jest:


970599336100.


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.

Zobacz obrazek 0AB
Zobacz obrazek 0AB
Zobacz obrazek 0AB