Hackerrank – Project Euler+ #005 – Smallest multiple

Hackerrank – Popis problému

Celý popis zadania sa nacháza – Hackerrank.

Riešenie

Je potrebné urobiť faktorizáciu čísla (hranice) na prvočísla, lebo niektoré čísla sú zároveň deliteľmi ostatných čísel. Takto sa zbavíme zbytočného násobenia a skúšania deliť všetky čísla, sú sú deliteľné od 1 po n.

Všetky prvočísla od 2 po N si vieme vypočítať napr. pomocou Eratostenovho sita.

Vypočítame, koľkokrát je dané prvočíslo v zadanom čísle. Dopracujeme sa k niečomu, ako nasledovná rovnica:

    \[n = p_1^{m_1}p_2^{m_2}p_3^{m_3} \ldots p_n^{m_n}\]

kde

    \[m_n\]

je početnosť krát prvočísla

    \[p_n\]

v zadanom čísle.

Takto vieme rozložiť každé prirodzené číslo.

    \[p_1\]

    \[p_n\]

získame z Eratostenovho sita, zostáva nám už len určiť exponenty

    \[m_1 \ldots m_n\]

. Exponenty vypočítame rovnicou:

    \[m_i = \lceil \frac{\log{n}}{\log{p_i}} \rceil\]

a urobíme pre každé prvočíslo.

Vytvoril som riešenie v týchto programovacích jazykoch:

Všetky riešenia sú dostupné aj na mojom GitHub profile.

Java

Leave a Reply

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *