Hackerrank – Project Euler+ #012 – Highly divisible triangular number

Hackerrank – Popis problému

Celý popis zadania sa nacháza – Hackerrank.

Riešenie

Prechádzam všetky čísla od 1 po N. Potrebujem urobiť celočíselný rozklad čísla na prvočísla. Vznikne nám takýto stav:

    \[n = p_1^{e_1} * p_2^{e_2} * \ldots\]

. Prvočísla si viem určiť napr. cez Eratosthenovo sito. Určím si exponenty. Urobím product hodnôt všetkých exponentov:

    \[divisors = \prod_{i=1}^{count~of~e} {e_i + 1}\]

.
Ak má nejaké číslo hodnotu

    \[divisors\]

väčšiu ako zadaný počet, vypíšeme ho, lebo to je náš výsledok.

Celočíselný rozklad nám umožnuje získať celkový počet deliteľov. Napr.

    \[6\]

je deliteľné

    \[2\]

a

    \[3\]

, teda rozklad

    \[6\]

na prvočísla je:

    \[6 = 2^1 \times 3^1\]

.

Ak si rozložíme číslo

    \[24\]

:

    \[24 = 2^3 \times 3^1\]

Všetky delitele

    \[24\]

sú kombinácie čísel vzniknutých kombinovaním daného rozsahu exponentu. Napr. pre

    \[24\]

môžme

    \[2\]

kombinovať od

    \[0\]

po

    \[3\]

a

    \[3\]

od

    \[0\]

po

    \[1\]

. Vznikne tieto kombinácie:

Pre

    \[24\]

máme

    \[8\]

deliteľov – jeden exponent má hodnotu

    \[3\]

a druhý hodnotu

    \[1\]

. Ale keďže môžme použiť aj

    \[0\]

ako exponent. Teda musíme vynásobiť každý exponent zvýšený o

    \[1\]

.

    \[8 = (3 + 1) * (1 + 1)\]

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é *