Hackerrank – Project Euler+ #001 – Multiples of 3 and 5

Hackerrank – Popis problému

Celý popis zadania sa nacháza – Hackerrank.

Riešenie

Máme zadané N. ako ohraničenie maximálneho možného čísla.

Môžeme začať od 3 do N a spočítavať čísla, ktoré sú deliteľné 3 a 5 (použijeme operáciu modulo). Tu nám nemusí vyjsť správny výsledok, pretože niektoré čísla sú započítané 2x. Tie čísla sú deliteľné 15, lebo algoritmus ich započíta aj pri porovnávaní deliteľnosti 3 a 5. Čísla deliteľné 15 musíme z celkového výsledku odpočítať.

Toto riešenie nie je tiež efektívne. Ak by bolo číslo N príliš vysoké a porovnávali by sme postupne deliteľnosť každého čísla, prekročili by sme časový limit na úlohu.

Existuje trik, ako rýchlo spočítať čísla, ktoré sa medzi sebou líšia medzi sebou len vždy o rovnakú hodnotu (v našom prípade o 3, 5 a 15).

Pomôže nám vzťah. Stačí mať najmenšie a najväčšie číslo v postupnosti čísel líšiacich sa o hodnotu d a ich počet n. Ich počet získame, keď vydelíme maximálne číslo v postupnosti číslom d.

Napríklad, ak je N = 20. Najväčšie číslo menšie ako 20, ktoré je deliteľné 3 je 18. Najmenšie je 3. Ich počet dostaneme rovnicou n = 18/3 = 6. Ich súčet bude:

    \[\frac{n(min + max)}{2} = \frac{6 \times (3 + 18)}{2} = 63\]

.
Podobne si vypočítame súčty pre čísla deliteľné 5 a 15.

Rovnica pre vyriešenie úlohy:

    \[Sum = {Sum}_3 + {Sum}_5 - {Sum}_{15}\]

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