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

Python - 14. lekcePython - 14. lekce

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

Python - 14. lekce

Google       Google       25. 1. 2006       29 297×

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 Konference: Moderní informační systémy podporují automatizaci

Konference: Moderní informační systémy podporují automatizaci

Současná situace v šíření onemocnění Covid-19 klade na řadu firem nové nároky a mnohé z nich jsou nyní více než kdy jindy závislé na nejmodernějších informačních technologiích. Proto i v oblasti podnikových informačních systémů vidíme rostoucí důraz na automatizaci nebo na důslednou integraci. Také o těchto trendech se bude mluvit na konferenci Firemní informační systémy, která se koná 24.9.2020 v pražském Kongresovém centru Vavruška na Karlově náměstí.

Reklama
Reklama
Obrázek ke článku Nebezpečí ukrytá v USB: z nuly na škvarek za pět sekund

Nebezpečí ukrytá v USB: z nuly na škvarek za pět sekund

Za cenu šesti dolarů lze celkem bez obtíží koupit nový, líbivě vyhlížející flash disk. Přidaná hodnota, které se vám spolu s ním dostane, už tak moc líbivá není. To, co se před pár sekundami tvářilo jako externí disk, se po připojení k počítači změní v důmyslné elektrické křeslo, které vaše zařízení v onen příslovečný škvarek promění za pár sekund. Cílovou skupinou pro koupi takových zařízení by mohli být záškodníci, kteří by tímto způsobem osnovali pomstu třeba vůči záletnému partnerovi. 

Obrázek ke článku Znalosti, dovednosti i prestižní titul MBA: Jde to i moderně a online

Znalosti, dovednosti i prestižní titul MBA: Jde to i moderně a online

Snad nikdy není špatná příležitost na investici do hodnotného vzdělání. Obzvlášť v případě, že absolvent dovede teoretické poznatky přetavit v praktické dovednosti, využitelné při řešení problémů i v komunikaci. Právě na to se specializuje studijní program MBA Řízení informačních technologií, vyučovaný na Business Institutu.

Obrázek ke článku Coding Bootcamp Praha: Obor IT krize nepoznamenala, žádaní jsou weboví vývojáři

Coding Bootcamp Praha: Obor IT krize nepoznamenala, žádaní jsou weboví vývojáři

Pandemie Covid-19 otřásla trhem práce v základech. Dopady krize pocítilo celkově až 45 % zaměstnanců. Není divu, že čím dál větší jistotu přináší obor IT. Ten zůstal krizí téměř nepoznamenán a při nutnosti začít dělat věci na dálku se ještě více ukázalo, jak moc mnohé firmy kvalitní IT potřebují. Do IT nyní přicházejí začátečníci, kteří v něm vidí lukrativní budoucnost a jistotu, ale i freelanceři a zaměstnanci z oborů zasažených krizí

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý