Автор проблеми: | De3b0o |
Підготовлено: | De3b0o |
Редагував: | Hasan Saleh (MathModel) |
Рішення
Факт 1 : Завжди оптимально використовувати згідно з умовою максимального суми.
Давайте уважно розглянемо випадки, розглянемо випадок, коли непарне, ми можемо використовувати , оскільки непарне і неможливо, щоб непарне закінчувалося на , оскільки число, що закінчується на , повинно ділитися на і , отже, для непарного ми використовуємо .
Розглянемо випадок, коли \gcd(n,10)=2, у цьому випадку остання цифра може бути 2,4,6,8, але не , отже, ми можемо використовувати як відповідь.
Для випадку, коли \gcd(n,10)=5, у цьому випадку остання цифра , отже, ми можемо використовувати .
Тепер для останнього випадку \gcd(n,10)=10, у цьому випадку оптимально розділити степені і степені , щоб у жодному з і не було закінчення , це можна зробити, обчисливши максимальний ступінь , що ділить , і максимальний ступінь , що ділить за \mathcal{O}(\log_5(n)), \mathcal{O}(\log_2(n)) відповідно.
Нехай p_2,p_5 - максимальні степені і , що ділять , тоді оптимально використовувати \min(2^{p_2},5^{p_5}) як перше число і \frac{n}{\max(2^{p_2},5^{p_5})} як друге число.
Складність \mathcal{O}(t \cdot \log(n)).
from math import *
def solve():
n=int(input())
if(gcd(n,10)!=10):
print(1,n)
else:
p2,p5=1,1
while(n%2==0):
p2*=2
n//=2
while(n%5==0):
p5*=5
n//=5
if(p2>p5):
print(p5,n*p2)
else:
print(p2,n*p5)
for _ in range(int(input())):
solve()