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       23 597×

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 NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

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 © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý