Přejít na hlavní obsah

Jak najít období zlomku v jazyce Python

Periodická desetinná čárka je desetinná čárka, ve které se jedna nebo více číslic opakuje nekonečně mnohokrát. Nalezení období je důležitým úkolem, zejména při práci s matematickými výpočty nebo analýzou dat. V jazyce Python existuje několik způsobů, jak najít období u zlomku.

Jedním ze způsobů je použití Floyd-Tortoizova algoritmu. Tento algoritmus simuluje pohyb želvy a zajíce po číselné ose. Cílem je pohybovat se zlomkem zvýšením indexu každého prvku a porovnáním aktuálního prvku s předchozím. Pokud jsou prvky stejné, pak jsme našli období. Pokud jsme se dostali na konec sekvence a nenašli jsme období, znamená to, že zlomek je iracionální a nemá období.

Dalším způsobem je použití vestavěných funkcí jazyka Python. Funkce jako 'from _fractions import Fraction' umožňují najít periodický zlomek a získat jej jako běžný nebo desetinný zlomek. Tyto funkce však mohou být neúčinné při práci s velkými periodami nebo velkými čísly.

Bez ohledu na zvolenou metodu vyžaduje nalezení období u zlomku pozornost a přesnost. Je důležité zkontrolovat výsledky a ujistit se, že algoritmus funguje správně. Python poskytuje praktické nástroje pro práci s periodickými zlomky, které mohou být užitečné při řešení různých matematických problémů.

Definice Období zlomku v Pythonu

Perioda desetinné čárky se nazývá posloupnost číslic, která se nekonečně opakuje po čárce. Například v desetinném záznamu čísla 1/3, zlomku 0.333. má období 3, které se opakuje donekonečna.

V Pythonu existuje několik způsobů, jak určit periodu zlomku. Jedním z nich je použití Floydova algoritmu. Floydův algoritmus je založen na principu "želvy a zajíce", kde želva a zajíc představují dvě různé rychlosti obcházení sekvence. Pokud je v sekvenci období, dříve nebo později se rychlosti želvy a zajíce srovnají a budou mít jednu pozorovací pozici.

K implementaci Floydova algoritmu v Pythonu lze použít cyklus while a dva ukazatele, které se budou pohybovat v sekvenci. Níže je uveden příklad kódu:

def find_period(numerator, denominator):numerator %= denominatorif numerator == 0:return 0turtle = numeratorhare = numeratorperiod = 0while True:turtle = (turtle * 10) % denominatorhare = (hare * 10) % denominatorhare = (hare * 10) % denominatorperiod += 1if turtle == hare:return period

Uvedená funkce find_period přijímá čitatel a jmenovatel zlomku jako argumenty a vrací období tohoto zlomku. Například pro zlomek 1/3, volání funkce find_period (1, 3) vrátí hodnotu 1, protože perioda je 3.

Použití Floydova algoritmu pomáhá efektivně najít období u zlomků, což může být užitečné při práci s čísly s velkou přesností a při analýze opakujících se sekvencí v matematice.

Co je to období?

Například desetinná čárka 1/3 bude mít sekvenci "3", protože po čárce se bude opakovat donekonečna: 0.333333333.

Období lze zaznamenat pomocí opakovacího znaménka obvykle umístěného nad poslední číslicí období, například: 0.3333

Matematický symbol období se nazývá "digitální rys" a je označen jako nad číslicí.

Algoritmus vyhledávání období

K nalezení období zlomku v Pythonu lze použít následující algoritmus:

1. Přeložte zlomky do řádku.

2. Najít pozici desetinné čárky v řádku a uložit ji do proměnné.

3. Zvýrazněte čísla za čárkou a uložte je do samostatného řádku.

4. Vytvořit cyklus, který překročí všechny možné délky období.

5. Pro každou délku období vytvořte podklad z číslic po čárce požadované délky.

6. Zkontrolujte, zda se tento podklad opakuje před řádkem. Pokud ano, pak se najde období, které cyklus dokončí a vrátí výsledek.

7. Pokud se nenajde období po překročení všech možných délek, pak je zlomek nekonečný a nemá žádné období.

Příklad implementace algoritmu:

def find_period(fraction):fraction_str = str(fraction)decimal_position = fraction_str.find('.')digits = fraction_str[decimal_position + 1:]for period_length in range(1, len(digits) // 2 + 1):period = digits[:period_length]repeating_pattern = digits[period_length:period_length + period_length]if repeating_pattern == period:return periodreturn Nonefraction = 1/3period = find_period(fraction)print(f"The period of is ")

V tomto příkladu funkce find_period () přijímá jako argument zlomek jako čitatele a jmenovatele a vrací nalezené období. V případě, že období není nalezeno, funkce vrátí None .

Příklad kódu pro definování období

K určení období desetinných míst v Pythonu lze použít následující kód:

def find_period(numerator, denominator):remainder = numerator % denominatorremainders = []while remainder not in remainders:remainders.append(remainder)remainder *= 10remainder %= denominatorperiod_start_index = remainders.index(remainder)period_length = len(remainders) - period_start_indexreturn period_lengthnumerator = 1denominator = 7period_length = find_period(numerator, denominator)print(f"The period of / is digits.")

K určení období používáme algoritmus dělení do sloupce. Zachováme zbytky z dělení a vynásobíme je 10 při každé iteraci, abychom získali další výboj desetinné čárky. Pokud se další zůstatek shoduje s jedním z předchozích pozůstatků, pak jsme našli období.

V uvedeném příkladu kódu definujeme období pro zlomek 1/7. Najdeme období dlouhé 6 číslic.

Posouzení složitosti algoritmu

Existuje několik typů hodnocení složitosti algoritmu:

  • Časová náročnost
  • Prostorová složitost

Časová složitost algoritmu umožňuje určit, jak dlouho bude trvat provedení algoritmu v závislosti na velikosti vstupních dat. Obvykle se měří z hlediska počtu operací nebo počtu iterací, které mají být provedeny.

Prostorová složitost algoritmu umožňuje určit, kolik další paměti bude potřeba k provedení algoritmu v závislosti na velikosti vstupních dat. Obvykle se měří z hlediska počtu použitých proměnných nebo velikosti dalších datových struktur.

Znalost složitosti algoritmu pomáhá programátorovi rozhodnout se pro výběr nejúčinnějšího algoritmu v konkrétní situaci. To umožňuje optimalizovat výkon softwarového kódu a zlepšit uživatelský zážitek.