結果
| 問題 | No.1611 Minimum Multiple with Double Divisors | 
| コンテスト | |
| ユーザー | 👑  Kazun | 
| 提出日時 | 2021-07-21 22:27:29 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 305 ms / 2,000 ms | 
| コード長 | 1,406 bytes | 
| コンパイル時間 | 349 ms | 
| コンパイル使用メモリ | 82,228 KB | 
| 実行使用メモリ | 86,312 KB | 
| 最終ジャッジ日時 | 2024-10-03 02:33:00 | 
| 合計ジャッジ時間 | 7,236 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 2 | 
| other | AC * 37 | 
ソースコード
def Prime_Factorization(N):
    if N<0:
        R=[[-1,1]]
    else:
        R=[]
    N=abs(N)
    if N&1==0:
        C=0
        while N&1==0:
            N>>=1
            C+=1
        R.append([2,C])
    if N%3==0:
        C=0
        while N%3==0:
            N//=3
            C+=1
        R.append([3,C])
    k=5
    Flag=0
    while k*k<=N:
        if N%k==0:
            C=0
            while N%k==0:
                C+=1
                N//=k
            R.append([k,C])
        k+=2+2*Flag
        Flag^=1
    if N!=1:
        R.append([N,1])
    return R
def solve(X):
    L=[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71]
    D=defaultdict(int)
    for y in L:
        if X%y!=0:
            break
        else:
            t=0
            x=X
            while x%y==0:
                t+=1
                x//=y
            D[y]=t
    for u in range(2,y):
        alpha=beta=1
        for p,e in S[u]:
            alpha*=1+D[p]
            beta *=1+D[p]+e
        if 2*alpha==beta:
            return u*X
    return y*X
#================================================
import sys
from collections import defaultdict
input=sys.stdin.readline
write=sys.stdout.write
S=[[]]
for a in range(1,101):
    S.append(Prime_Factorization(a))
T=int(input())
Ans=[]
for _ in range(T):
    X=int(input())
    Ans.append(solve(X))
write("\n".join(map(str,Ans)))
            
            
            
        