Python - 14. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Python - 14. lekcePython - 14. lekce

 

Python - 14. lekce

Google       Google       25. 1. 2006       24 167×

Prvočísla jsou v programování takovým prubířským kamenem. Na vytvoření programu, který bude určovat, jestli zadané číslo je či není prvočíslem, potřebujete znát pár základních příkazů. Čeho ale je potřeba více, je pořádně si to rozmyslet a vymyslet, jak my sami určujeme, jestli číslo je prvočíslem a pokusit tuto metodu převést na program. A o tom je dnešní lekce.

Reklama
Reklama

Prvočísla

Zadání úkolu

Na konci tohoto článku byste měli mít všechny předpoklady pro napsání programu, který bude čekat od uživatele číslo a zjistí, jestli to číslo je či není prvočíslo. Žádnou novou funkci se nenaučíme, je to spíše takové opakování a rozpohybování mozkových závitů.


Teorie

Co je to vůbec prvočíslo? Zkusíme se zeptat pana Googla: Prvočíslo. Hned první odkaz nás zavádí do české Wikipedie, velké studnice znalostí, do které může každý přispívat svou troškou a pomoci tak budovat otevřenou encyklopedii.

Tam se dočítáme:

Prvočíslo je přirozené číslo větší než 1, které je beze zbytku
dělitelné pouze jedničkou a samo sebou.
Jinými slovy třeba pro šestku: šestka není prvočíslo, protože se dá dělit, beze zbytku kromě jedničky a sebe sama také dvojkou a dokonce i trojkou. A číslo 13 zjevně prvočíslo je, protože se, nepočítaje 1 a 13, nedá beze zbytku dělit žádným číslem - ani čísly 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 - při dělení kterýmkoliv z těchto čísel vychází nějaký zbytek. Například 13:7=1 (zbytek 6). Takže teorie je celkem jasná. Teď ale jak to uděláme v programu.

Dnes se toho spoustu dá najít na Internetu. Pokud dostanete udělat program na prvočísla ve škole za úkol a nebude se vám do toho vůbec chtít, celkem lehce najdete na netu řešení. Já jsem vygooglil pro Python jen jedno řešení: hned ten první odkaz. Takže žádná práce. Ale nám jde o to, jestli my sami to dokážeme, jestli na to máme to sami napsat a ne opsat!



Programujte

Jak jsem řekl, nebude zde nic nového, jen chytrolínská kombinace toho, co již známe. Začínat by to mohlo nějak takhle:

print "Urcim, jestli cislo, ktere mi zadate, je prvocislo."
print "Zadej cislo:",
N=input()

A nyní je lépe dvakrát se rozmyslet, jak to budeme dělat. Jak jsme to říkali? Že číslo 13 prvočíslem je?

Vezmeme tedy zadané číslo a budeme procházet všechna čísla, která jsou pod ním (tedy od 2 do N-1) a budeme testovat dělitelnost. Stačí jediný podíl beze zbytku a můžeme skončit, protože je již jasné, že to 'cislo' prvočíslem není.

Pokud projdeme celý cyklus a nenarazíme ani na jediný podíl beze zbytku, tak to bude prvočíslo. Jak ale zajistit programově, abychom to na konci poznali? No uděláme to takovým malým fíglem, který se u podobných příkladů často používá. Na začátku budeme předpokládat, že to prvočíslo je, jinými slovy, zavedeme si proměnnou např. jePrvocislem=True, a pokud uvnitř v cyklu zjistíme první podíl beze zbytku, tak nejenže skončíme, ale nastavíme navíc jePrvocislo=False. No a na konci toto otestujeme podmínkou.


Snad jsem na nic nezapomněl. Je to plně popsaný algoritmus. Snad ještě jen praktická rada, jak v Pythonu zjistit dělitelnost. Dělitelnost je, když výsledek vychází beze zbytku, tedy zbytek=0. No a tady napovídám již více než dost:

>>> 13 % 7
6
>>> 13 / 7
1
>>>


Úkol

  • K čemu jsou vlastně prvočísla dobrá, kde mají praktické využití? (použijte print """zde bude Vaše odpověď""")
  • Určete, jestli zadané číslo je prvočíslem.
  • Použijte funkci, abyste mohli použít tuto formu zápisu, např.:
    # zde bude definice funkce 
    
    print "Urcim, jestli cislo, ktere mi zadate, je prvocislo."
    print "Zadej cislo:",
    N=input()    
    
    print jeToPrvocislo(N)
  • Zefektivněte algoritmus - je třeba prohledávat čísla až do N-1?
  • Dejte pozor na "hraniční hodnoty": 0,1,2.
  • Chcete dostat jedničku? Musíte tedy vymyslet něco svého, něco navíc. Např.
    • Najděte prvních N prvočísel
    • Najděte první N-místné prvočíslo
  • Těším se na všechna řešení

Závěr

Je to stokrát omleté téma, já vím. Obzvláště na středních elektro-školách je toto častou součástí testů a písemek. Přesto (nebo právě proto) je to dost zajímavá úloha, která má tisícero modifikací.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

3 názory  —  3 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Pavel KosinaAutor programuje v Pythonu.
Web    

Nové články

Obrázek ke článku JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá největší digitální dílnu pro veřejnost v České republice

JIC otevírá první nonstop veřejně dostupnou digitální dílnu světového formátu s vybavením za 3 miliony korun. Dílnu může využívat po registraci kdokoliv. V  prostorách vzniknou prototypy produktů místních startupů, projekty kutilů a studentů i umělecká díla. Cílem dílny je zpřístupnit veřejnosti drahé přístroje a přitáhnout více podnikavých lidí k technickým oborům.

Reklama
Reklama
Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý