Python - rozkład liczby na iloczyn liczb pierwszych

0

Witam, mam do napisania program, który wczyta i liczbę naturalną>2 i przedstawi ją w postaci iloczynu liczb pierwszych. Macie może jakiś pomysł jak to napisać korzystając z while, if, for?

1

Tak.

  1. Wczytać liczbę X.
  2. Szukać liczb pierwszych od 2 w górę. Dla każdej liczby pierwsze sprawdzać czy X dzieli się przez tą liczbę bez reszty.
  3. Jeśli się dzieli to X = X/liczba, a samą liczbę dopisujemy do listy. Możemy dzielić wielokrotnie przez tą samą liczbę pierwszą.
    Robimy tak aż X nie dojdzie do 1.
    Wynikiem są liczby które zapisaliśmy na liście.
0

Właśnie mniej więcej taki pomysł miałem, tylko ciężko z tym szukaniem kolejnych liczb pierwszych. Nie potrafię sobie tego ułożyć

2

To nie szukaj tych liczb pierwszych.

  1. Wczytaj X.
  2. Podstaw p = 2.
  3. Dziel X przez p tak długo jak się da (X=X/p). Po każdym dzieleniu dopisz p do listy czynników.
  4. Jeśli X == 1 idź do 7.
  5. Zwiększ p o 1.
  6. Wróć do 3.
  7. Wypisz listę czynników.
0

Tylko, że nie mogę korzystać z listy.

1

Omg. To zamiast dodawać do listy wypisuj od razu na ekran. A w punkcie 7 nie rób nic.

0
x=int(input('podaj liczbę\n'))
while x>2:
    p=2
    while x%p==0:
        x=x/p
        p=p+1
        print('',x)

Takie pytania:
-np. dla 18 działa ok bo najpierw dzieli przez 2, później przez 3, ale np. dla 25 program nie rusza, dlaczego? Czy p nie powinno się zwiększać o jeden aż nie pozostanie liczba mniejsza/równa 2 na końcu?
-no i na razie mi drukuje po prostu wyniki dzielenia, jak zapisać by drukował to przez co dzielił i to tyle razy ile to robił?

1

Bez sensu. Przecież możesz (a nawet powinieneś!) dzielić wielokrotnie przez te same liczby!
Na przykład 8 = 222
To swoje p powinieneś podbijać w zewnętrznej pętli a nie w wewnętrznej

0

no to przecież tak jest, np. dla 8 dzieli 3 razy przez 2, dla 18 dzieli przez 2 i wychodzi 9, wiec nie może przez 2 to dzieli przez 3.

1

o_O to ty chyba kompilujesz inny kod, bo ten który podałeś wykonuje tylko JEDNO DZIELENIE dla danego p. Jak wstukasz 8 to wypisze ci 2,4 co jest oczywiście niepoprawnym wynikiem.

0

no ale jak wpiszę 16 to już wypisuje 8,4,2 więc jednak tutaj dzieli 3 razy. No ok ale ja się nie znam. Jak w takim razie mam zwiększać to p w zewnętrznej pętli? Bo coś nie mogę tego zrobić

1
x=int(input('podaj liczbę\n'))
p=2
while x>2:
    while x%p==0:
        x=x/p
        print(p)
    p=p+1

Teraz wypisuje to co powinno, czyli czynniki pierwsze.

0

Tylko, że to dla 18 drukuje 2 i program nic nie robi

0

Kurczę, przepraszam, teraz ok ale nie wiem gdzie miałem błąd bo usunąłem wszystko i skopiowałem i teraz działa ;) a jak zrobić by zapisywał te czynniki w postaci mnożenia a nie w słupku? np 222

0

Sklejaj stringa zamiast wypisywać? Albo dopisuj do listy a potem ją wypisz odpowiednio? Użyj mózgu wreszcie?

0

zrobiłem print(p,end='') jednak drukuje 222 czyli jedna za dużo ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1