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?
Tak.
- Wczytać liczbę X.
- Szukać liczb pierwszych od 2 w górę. Dla każdej liczby pierwsze sprawdzać czy X dzieli się przez tą liczbę bez reszty.
- 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.
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ć
To nie szukaj tych liczb pierwszych.
- Wczytaj X.
- Podstaw p = 2.
- Dziel X przez p tak długo jak się da (X=X/p). Po każdym dzieleniu dopisz p do listy czynników.
- Jeśli X == 1 idź do 7.
- Zwiększ p o 1.
- Wróć do 3.
- Wypisz listę czynników.
Tylko, że nie mogę korzystać z listy.
Omg. To zamiast dodawać do listy wypisuj od razu na ekran. A w punkcie 7 nie rób nic.
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ł?
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
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.
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.
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ć
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.
Tylko, że to dla 18 drukuje 2 i program nic nie robi
Kłamiesz.
http://ideone.com/UE341D
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
Sklejaj stringa zamiast wypisywać? Albo dopisuj do listy a potem ją wypisz odpowiednio? Użyj mózgu wreszcie?
zrobiłem print(p,end='') jednak drukuje 222 czyli jedna za dużo ;)