Wpis z mikrobloga

#programowanie #cpp

Witam mam pytanie jak przekształcić sito Eratostenesa, liczby pierwsze i rozkład na czynniki pierwsze z funkcji iteracyjnej na funkcję rekurencyjną? Jak będzie potrzebny kod to podeślę na pastebinie. Liczę na pomoc.
  • 19
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@drift: No ta, trzeba podać dobry dzielnik wiadomo, i jeszcze uwzględnić przypadek z jedynką, pisałem to na szybko. Generalnie idea taka żeby to po prostu opakować w funkcję z tylko jednym argumentem czyli liczbą która chcemy sprawdzić, i ta funkcja zajmie się okresleniem maksymalnego dzielnika i wywoła właśnie tą. Najlepiej w tej funkcji z 1 argumentem uwzględnić własnie liczby parzyste i jedynke od razu, żeby nie wchodziło w tą drugą
  • Odpowiedz
@dzimen: Wszystko się da, tylko to będzie bardziej skomplikowane, nieintuicyjne i prawdopodobnie głupie, jeśli samo robienie sprawdzania liczb pierwszych rekurencyjnie nie jest głupie, no ale to zapewne jakiś homework. Po prostu zrób

if(isPrime(n,n/2))
cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
else
cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;
  • Odpowiedz
@Porana123: zostało mi teraz sito Eratostenesa i rozkład na czynniki pierwsze ale to już dla mnie czarna magia. Bo tam są tablice i nwm jak można tablicę na rekurencję zamienić i wgl...
  • Odpowiedz
@dzimen: Przecież to jest jeszcze prostsze niż tamto, wypełniasz tablice od 2 indeksu liczbami od 2 czyli array[2]=2, array[3]=3 i tak do jakiegoś n, potem wywołujesz sito(n, 2), robisz w środku pętle for i=2 to n do array[i]=0 (oczywiście do i nie dodajesz 1 tylko to co w drugim argumencie, czyli 2) i potem sito(n, 3) i tak dopóki 2 argument nie będzie większy od pierwiastka z n (to trzeba
  • Odpowiedz
@Porana123: chce mi się, ale po prostu nwm jak się zabrać za to... Tym bardziej ze iteracyjne sito i rozkład jest banalny i wydajniejszy niż rekurencyjny...
  • Odpowiedz