Le Personnage Principal#12217

Le Personnage Principal (Corrigé)

Auteur du problème :

De3b0o

Préparé par :

De3b0o

Édité par :

Hasan Saleh (MathModel)

Solution

Fait 1 : Il est toujours optimal d'utiliser en raison de la condition de somme maximale.

Examinons les cas attentivement. Considérons le cas où est impair, nous pouvons utiliser car est impair et il est impossible qu'un impair se termine par , puisque un nombre se terminant par doit être divisible par et , donc pour un impair, nous utilisons .

Considérons le cas où \gcd(n,10)=2, dans ce cas, le chiffre de fin est soit 2,4,6,8 mais pas , donc nous pouvons utiliser comme réponse.

Pour le cas où \gcd(n,10)=5, dans ce cas, le chiffre de fin est , donc nous pouvons utiliser .

Maintenant, pour le dernier cas \gcd(n,10)=10, dans ce cas, il est optimal de séparer les puissances de et les puissances de afin de ne pas avoir de à la fin de et , cela peut être fait en calculant la puissance maximale de divisant et la puissance maximale de divisant en \mathcal{O}(\log_5(n)), \mathcal{O}(\log_2(n)) respectivement.

Soit p_2,p_5 la puissance maximale de et respectivement divisant , alors il est optimal d'utiliser \min(2^{p_2},5^{p_5}) comme premier nombre et \frac{n}{\max(2^{p_2},5^{p_5})} comme deuxième nombre.

Complexité \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()