• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

ocena kodu - rozkład na czynniki

Object Storage Arubacloud
0 głosów
438 wizyt
pytanie zadane 9 października 2022 w Python przez techno16 Gaduła (4,780 p.)

Zrobiłem w pythonie algorytm rozkładu liczby na czynniki pierwsze. Wynik myślę że jest dobry (nie trafiłem jeszcze na żaden błąd), więc proszę o code review cool czy można to w lepszy sposób zapisać itp.

def rozklad(n):
    dzielniki = []
    print(n)
    while (n % 2) == 0:
        n /= 2
        dzielniki.append(2)
        print(int(n))
    k = n
    n = n / n
    dzielniki.append(k)
    print(int(n))
    return print(dzielniki)


rozklad(56)

 

komentarz 9 października 2022 przez Oscar Nałogowiec (29,320 p.)

W linii 9 na pewno ma byc:

    n = n / n

?

A w szóstej zawsze dodajesz 2? To ma pewno daje czynniki pierwsze?

 

komentarz 9 października 2022 przez techno16 Gaduła (4,780 p.)

tak, jeżeli n nie da się podzielić przez 2 to się dzieli przez siebie i wychodzi 1

inspirowałem się wikipedią

komentarz 9 października 2022 przez Oscar Nałogowiec (29,320 p.)
To po co dzielić kiedy z góry wiadomo ile wyjdzie?
komentarz 9 października 2022 przez Whistleroosh Maniak (56,980 p.)

@techno16,  inspirowałeś się wikipedią, ale nie przeczytałeś dokładnie jak działa algorytm. Masz tam jasno napisane 

Szukamy najmniejszej liczby pierwszej dzielącej daną liczbę

i potem dzielimy przez znalezioną liczbe pierwszą. To że w podanym tam przykładzie wystarczyło dzielić przez 2 nie znaczy, że da sie tak zrobić dla każdej innej liczby

komentarz 9 października 2022 przez Nelson89 Dyskutant (7,720 p.)

Cześć,

@techno16, linia 12 - to był zmienił, bo przynajmniej ja nie widzę powodu, by zwracać printa.

Pozdrawiam,

Nelson

komentarz 9 października 2022 przez techno16 Gaduła (4,780 p.)

@Whistleroosh, to jak znaleźć najmniejszą liczbę? Operatorem modulo?

komentarz 9 października 2022 przez Whistleroosh Maniak (56,980 p.)

Wystarczy że iterujesz sie po liczbach od 2 do sqrt(n) i sprawdzasz czy ta liczba dzieli n.

implementacja w c++

komentarz 9 października 2022 przez techno16 Gaduła (4,780 p.)

dzięki wielkie za pomoc heart

komentarz 10 października 2022 przez tmar1212 Bywalec (2,600 p.)

@Whistleroosh wystaczy iterować po liczbach pierwszych od zero do pierwiastka z n.

komentarz 10 października 2022 przez Whistleroosh Maniak (56,980 p.)
Tak, ale trzeba wiedzieć które są pierwsze. Więc najprościej przeiterować sie po wszystkich od 2 do sqrt(n) i jeżeli aktualna liczba to x i x dzieli n, to n /= x. Ale jak mamy zbiór liczb pierwszych to rzeczywiście wystarczy po nich przejść.

1 odpowiedź

0 głosów
odpowiedź 10 października 2022 przez tmar1212 Bywalec (2,600 p.)

Wynik myślę że jest dobry (nie trafiłem jeszcze na żaden błąd)

100 -> [2, 2, 25.0] ??

komentarz 10 października 2022 przez Oscar Nałogowiec (29,320 p.)
Nie, to nie jest dobry wynik. 25 to nie jest liczba pierwsza, 25 = 5 * 5.

Prawidłowy rozkład liczba 100 na czynniki pierwsze to 2,2,5,5.

Twój program chyba po prostu sprawdza ile razy można daną liczbę podzielić przez 2.
komentarz 10 października 2022 przez tmar1212 Bywalec (2,600 p.)
Własnie dlatego OP'a zapytałem:)

Podobne pytania

0 głosów
0 odpowiedzi 277 wizyt
0 głosów
1 odpowiedź 350 wizyt
pytanie zadane 16 stycznia 2023 w C i C++ przez piotr_domanski Bywalec (2,080 p.)
0 głosów
1 odpowiedź 249 wizyt

92,700 zapytań

141,615 odpowiedzi

320,153 komentarzy

62,059 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...