Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Kamil
Člen
Avatar
Kamil:30.1.2023 21:20
def je_cislo(cislo):
    if cislo < 2:
        print("Číslo není prvočíslo")
    for i in range(2, cislo):
        if cislo % i == 0:
            print("Číslo neni prvočíslo")
    print("Číslo je prvočíslo")

je_cislo(5)

Zkusil jsem: Ahoj, asi jsem uplnej "dement"... :-)

Číslo je prvočíslo pokud lze dělit samo sebou a jedničkou. Učím se s Pythonem a absolutně nechápu logiku v tomto kodu. Myslel jsem si, že když cislo % i == 0 tak je číslo prvočíslo a ono není.

Můžete mi to prosím vysvětlit?

Chci docílit:
Můžete mi to prosím vysvětlit?

 
Odpovědět
30.1.2023 21:20
Avatar
Pavel
Člen
Avatar
Pavel:31.1.2023 13:00

Prvočíslo není menší než 2, to je ten první if.
Dále když vezmeme to číslo 5, tak

range(2, 5)  #-> [2, 3, 4]

takže pokud by číslo 5 bylo dělitelné 2, 3 nebo 4, tak nemůže být prvočíslem.
Chybou toho kódu je, že pro neprvočísla vypíše oba printy a pro čísla které mají více dělitelů, vypíše několikrát

"Číslo neni prvočíslo"

Doporučuji

print("neco")

nahradit

return "neco"

Ideálně místo textu vracet True/False.
Jinak ten algoritmus se dá zeefektivnit, není třeba zkoušet celý range(2, cislo), což je zajímavé pro větší čísla, ale to si zkus najít sám.

 
Nahoru Odpovědět
31.1.2023 13:00
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31.1.2023 14:48

Co jsi nasel googlem nebo na wiki? Zkousel jsi to vubec?

 
Nahoru Odpovědět
31.1.2023 14:48
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Kamil
DarkCoder:31.1.2023 15:31

Číslo je prvočíslo pokud lze dělit samo sebou a jedničkou.

To je dosti nešťastná definice prvočísla. To by splňovala všechna čísla, neboť každé číslo lze dělit jedničkou a samo sebou.

Definice prvočísla:

Prvočíslo je celé číslo, které má pouze dva dělitelé: 1 a samo sebe.

Zde je vysoce optimalizovaný algoritmus psaný v Pythonu pro zjištění, zda zadané číslo je prvočíslem.

def is_prime(n):
    if n <= 1:
        return False
    if n <= 3:
        return True
    if n % 2 == 0 or n % 3 == 0:
        return False
    i = 5
    w = 2
    while i * i <= n:
        if n % i == 0:
            return False
        i += w
        w = 6 - w
    return True
Nahoru Odpovědět
31.1.2023 15:31
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.