Witam, zastanawiam się nad tym zadaniem i obmyśliłem taki algorytm:
1. sprawdzam, czy działka nie jest kwadratem:
-> jeżeli jest kwadratem to znajduje największy dzielnik liczby mniejszy od niej samej żeby jednak podzielić na jak największe części tą działkę.
->jeżeli nie jest kwadratem to rekurencyjnie liczę NWD
Akceptacji nie ma, w komentarzu jest że odpowiedź za wolna.
może ktoś zerknąć na kod ? ewentualnie podpowiedzieć czy coś źle zrozumiałem ? albo czy źle podchodzę do tego zadania ?
tu jest mój kod
https://ideone.com/gqYEvG69
Rekurencja !!! -- naprawde !!! -- really !!!
Rekurencja to chyba jedna z najwolniejszych metod . Każde odwołanie to wrzucenie na stos całej masy danych co jest kosztowne . Do tego może się zdarzyć że zabraknie prędzej pamięci niż znajdziesz rozwiązanie . NASA podobno zakazuje stosowania rekurencji w algorytmach które obsługuje sprzęt w kosmosie .
Nazwanie funkcji "rekurencja" to nie najlepszy pomysł - lepiej ją nazwać NWD lub GCD - od razu wiesz co ten kawałek kodu robi .
Ja to zadanie zrobiłem z użyciem SITA - generuje tablice w której dla indeksów liczb pierwszych wstawiam jeden a dla pozostałych najmniejszy dzielnik danej liczby ( indeksu ). Dla takiej metody tylko raz ustalasz która liczba jest pierwsza . Sprawdzenie na jakie kwadraty podzielić działkę to sprawdzenie jednej zmiennej z SITA .
@fulse dzięki za podpowiedź, rzeczywiście to nie ma sensu, bo dla kwadratu działa, ale po zrobieniu tej korekty dalej daje błędną odpowiedź…
in
1
6127 6127
out
557
@konradmal
Uwaga na liczby pierwsze oraz na szukanie dzielnika w taki sposób:
i = 2;
while( a % i != 0 )
i++;