結果
問題 | No.1611 Minimum Multiple with Double Divisors |
ユーザー | None |
提出日時 | 2021-08-03 04:37:01 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,846 bytes |
コンパイル時間 | 254 ms |
コンパイル使用メモリ | 82,308 KB |
実行使用メモリ | 97,892 KB |
最終ジャッジ日時 | 2024-09-16 14:51:53 |
合計ジャッジ時間 | 7,316 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | TLE | - |
testcase_01 | -- | - |
testcase_02 | -- | - |
testcase_03 | -- | - |
testcase_04 | -- | - |
testcase_05 | -- | - |
testcase_06 | -- | - |
testcase_07 | -- | - |
testcase_08 | -- | - |
testcase_09 | -- | - |
testcase_10 | -- | - |
testcase_11 | -- | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
testcase_35 | -- | - |
testcase_36 | -- | - |
testcase_37 | -- | - |
testcase_38 | -- | - |
ソースコード
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 T=int(input()) for _ in range(T): x=int(input()) res=float("inf") cnt=1 for key,val in prime_counter(x).items(): cnt*=(val+1) for k in range(2,32): cnt2=1 for key,val in prime_counter(x*k).items(): cnt2*=(val+1) if cnt2==cnt*2: res=min(res,x*k) print(res)