321 Востаннє редагувалося koala (04.07.2021 21:16:00)

Re: Цікаві задачі

Знайти найменше ціле число, не менше за задане, яке можна розкласти на суму різних ступенів 3, наприклад 10=>10=32+30, 100=>108=34+33.

Python
def find_distinct_pow3(x):
    result = 0
    power = 1
    while x:
        x, digit = divmod(x, 3)
        if digit<2:
            result += power*digit
        else:
            result = 0
            x+=1
        power *= 3
    return result

Пояснення: перебираємо трійкове представлення числа. Якщо двійок немає - видаємо результат. Якщо зустріли двійку - додаємо 1 до розряду перед нею і викидаємо все до цього місця. В результаті маємо найменше число, що складається в трійковій системі з 0 та 1.

Подякували: leofun01, tchort, P.Y., Chemist-i4