結果

問題 No.1611 Minimum Multiple with Double Divisors
ユーザー NoneNone
提出日時 2021-08-03 04:16:21
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,941 bytes
コンパイル時間 205 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 83,528 KB
最終ジャッジ日時 2024-09-16 14:51:05
合計ジャッジ時間 23,876 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 515 ms
78,848 KB
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
testcase_22 WA -
testcase_23 WA -
testcase_24 WA -
testcase_25 WA -
testcase_26 WA -
testcase_27 WA -
testcase_28 AC 39 ms
52,480 KB
testcase_29 AC 40 ms
52,864 KB
testcase_30 AC 40 ms
52,480 KB
testcase_31 AC 40 ms
52,864 KB
testcase_32 AC 39 ms
52,864 KB
testcase_33 AC 39 ms
52,864 KB
testcase_34 AC 40 ms
53,120 KB
testcase_35 WA -
testcase_36 AC 39 ms
52,608 KB
testcase_37 AC 38 ms
52,864 KB
testcase_38 AC 39 ms
52,480 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

def is_prime_MR(n):
    if n in [2,7,61]:
        return True
    if n<2 or n%2==0:
        return False
    d=n-1
    d=d//(d&-d)
    L=[2,7,61] if n<1<<32 else [2,3,5,7,11,13,17] if n<1<<48 else [2,3,5,7,11,13,17,19,23] if n<1<<61 else [2,3,5,7,11,
                                                                                                            13,17,19,23,
                                                                                                            29,31,37]
    for a in L:
        t=d
        y=pow(a,t,n)
        if y==1: continue
        while y!=n-1:
            y=(y*y)%n
            if y==1 or t==n-1: return False
            t<<=1
    return True


def prime_counter(n):
    i=2
    ret={}
    mrFlg=0
    while i*i<=n:
        k=0
        while n%i==0:
            n//=i
            k+=1
        if k: ret[i]=k
        i+=1+i%2
        if i==101 and n>=2**20:
            while n>1:
                if is_prime_MR(n):
                    ret[n],n=1,1
                else:
                    mrFlg=1
                    j=_find_factor_rho(n)
                    k=0
                    while n%j==0:
                        n//=j
                        k+=1
                    ret[j]=k

    if n>1: ret[n]=1
    if mrFlg>0: ret={x:ret[x] for x in sorted(ret)}
    return ret


def divisors(n):
    """ O(x^1/4)  O(10**9)の整数10**4個の約数列挙が可能 """
    primes=prime_counter(n)
    P=set([1])
    for key,value in primes.items():
        Q=[]
        for p in P:
            for k in range(value+1):
                Q.append(p*pow(key,k))
        P|=set(Q)
    return P


def _find_factor_rho(n):
    m=1<<n.bit_length()//8+1
    for c in range(1,99):
        f=lambda x:(x*x+c)%n
        y,r,q,g=2,1,1,1
        while g==1:
            x=y
            for i in range(r):
                y=f(y)
            k=0
            while k<r and g==1:
                ys=y
                for i in range(min(m,r-k)):
                    y=f(y)
                    q=q*abs(x-y)%n
                g=gcd(q,n)
                k+=m
            r<<=1
        if g==n:
            g=1
            while g==1:
                ys=f(ys)
                g=gcd(abs(x-ys),n)
        if g<n:
            if is_prime_MR(g):
                return g
            elif is_prime_MR(n//g):
                return n//g


################################################################################################
import sys

input=sys.stdin.readline
from math import gcd


def mex(array):
    i=2
    while i in array or is_prime_MR(i)==False:
        i+=1
    return i


p=1
P=[]
for _ in range(10**3+2):
    P.append(p)
    p*=2

T=int(input())

for _ in range(T):
    x=int(input())
    res=float("inf")
    Q=set()
    for key,val in prime_counter(x).items():
        cnt=val+1
        res=min(pow(key,cnt),res)
        Q.add(key)
    Q=list(sorted(Q))
    m=mex(Q)
    res=min(res,m)

    print(res*x)
0