Python - algorytm wypisujący wszystkie dzielniki pierwsze liczby n

0

Witam! Mam problem z tym zadaniem... Dopiero zaczynam się uczyć i wymyśliłam coś takiego (algorytm jest niepoprawny, ale nie wiem dlaczego).

n=int(input('wpisz n:'))

def liczba_pierwsza(i):
    for i in range(2,i):
        if n%i!=0:
            return i
for i in range (0,n):
    if n/i == liczba_pierwsza(i):
        print(i)

Proszę o pomoc :)

2

Nie bardzo rozumiem co ten kod ma niby robić. Ta pierwsza pętla jeszcze ma jakiś sens, gdybyś nie nadpisywała sobie zmiennej i, ta pierwsza pętla mogłaby służyc to znalezienia pierwszego dzielnika n. Ta druga pętla nie ma żadnego sensu i ten if tam także nie ma sensu.
Możesz do tego podejść tak:

  1. Weź liczbę n i szukaj dzielnika od 2..sqrt(n)
  2. Jeśli znajdziesz dzielnik to sobie go zapisujesz czy co tam chcesz, dzielisz n przez ten dzielnik i powtarzasz znowu szukanie dzielnika od nowa
  3. Jeśli nie znaleziono dzielnika to ostatnim dzielnikiem jest to n które ci zostało

Można to troche zoptymalizować sprawdzając w punkcie 2 od razu czy dany dzielnik nie jest "wielokrotny"

0

Wydaje mi się, że w algorytmie chodzi o to, żeby wyświetlił dzielniki liczby n, które są liczbami pierwszymi.

n=int(input('wpisz n:'))
i=1
while i*i<n:
    if n%i==0:
            print(i, n//i)
        i+=1
if i*i==n:
    print (i)

Może zacząć od tego? Ale nie wiem jak wyeliminować wyniki, które nie są liczbami pierwszymi.

1

Po prostu dziel tą liczbę przez znalezione dzielniki i wtedy nie trzeba niczego eliminować. Bo zanim np. znajdziesz dzielnik 6 to znajdziesz dzielnik 2 i 3 wcześniej, więc jak podzielisz liczbę najpierw przez to 2 a potem przez 3 to już nie będzie podzielna przez 6.

1

W Twoim podejściu, naiwnym, możesz tak:

def is_prime(n):
    #TODO: Write a function that prints all prime divisors of a given number.

def print_prime_divisors(n):
    for i in range (2, n + 1):
        if n % i == 0 and is_prime(i):
            print(i)

is_prime, tutaj: link
Albo optymalizuj, jak sugeruje @Shalom; działa sprawnie, (funkcja, factorize):
link

0

Bardzo dziękuję!!! Wreszcie to mam!

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