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

Python - 14. lekcePython - 14. lekce

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

Python - 14. lekce

Google       Google       25. 1. 2006       25 834×

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 NVIDIA shrnuje přehled novinek na E3 2018

NVIDIA shrnuje přehled novinek na E3 2018

Společnost NVIDIA si u příležitosti E3 2018 připravila řadu novinek, které uvádí v kompletním přehledu, Například nové hry s podporou NVIDIA Highlights, která je součástí aplikace GeForce Experience, i nadále nabírá na obrátkách. Kromě výše zmíněné Shadow of the Tomb Raider získaly podporu také hry Dirty Bomb a Switchblade.

Reklama
Reklama
Obrázek ke článku SODAT vidí budoucnost datové bezpečnosti ve strojovém učení

SODAT vidí budoucnost datové bezpečnosti ve strojovém učení

Firmy chrání svá citlivá data často nedostatečně. Podle průzkumu společnosti SODAT se v minulém roce setkalo až 80 % z nich s bezpečnostním incidentem ztráty nebo úniku dat. Jedna z pilotních firem, která testovala novou verzi řešení SODAT Protection & Analytics 2.0pro bezpečností analýzu a monitoring dat díky novince zjistila, kdo z disku smazal důležité výkresy a mohla na incident včas reagovat.

Obrázek ke článku Kontrolujete pracovní emaily i na dovolené? 7 tipů odborníka, jak nepřijít o data

Kontrolujete pracovní emaily i na dovolené? 7 tipů odborníka, jak nepřijít o data

Letní měsíce jsou pro většinu zaměstnanců spojené s každoroční dovolenou. Z údajů Českého statistického úřadu vyplývá, že v roce 2017 podnikli Češi přes 13 milionů delších cest (tzn. s více než čtyřmi noclehy). Přitom právě na období července, srpna a září připadá více než 7,5 milionů z nich. Nicméně tradiční představu o dovolené jako o čase, kdy má práci na starost někdo jiný, Češi boří. 

Obrázek ke článku 10 SEO mýtů, které už nemusíte v roce 2018 řešit

10 SEO mýtů, které už nemusíte v roce 2018 řešit

„Kolik má být na stránce klíčových slov?“, „Nemáš vyplněný meta tag keywords, to nebude fungovat.“, „Katalogy jsou mrtvý“. Také jste už slyšeli některé z těchto otázek? Pojďme si na ně konečně jednou provždy odpovědět.

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