結果
問題 |
No.1611 Minimum Multiple with Double Divisors
|
ユーザー |
![]() |
提出日時 | 2025-06-12 16:20:46 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,058 bytes |
コンパイル時間 | 273 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 91,648 KB |
最終ジャッジ日時 | 2025-06-12 16:21:02 |
合計ジャッジ時間 | 12,757 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 2 |
other | AC * 1 WA * 10 TLE * 1 -- * 25 |
ソースコード
import sys import math def factorize(n): factors = {} while n % 2 == 0: factors[2] = factors.get(2, 0) + 1 n = n // 2 i = 3 while i * i <= n: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i i += 2 if n > 1: factors[n] = 1 return factors def is_prime(n): if n < 2: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(math.isqrt(n)) + 1, 2): if n % i == 0: return False return True def find_min_p(primes_set): candidate_p = 2 while True: if candidate_p not in primes_set and is_prime(candidate_p): return candidate_p candidate_p += 1 def main(): input = sys.stdin.read().split() T = int(input[0]) for i in range(1, T+1): X = int(input[i]) if X == 1: factors = {} else: factors = factorize(X) primes = list(factors.keys()) primes_set = set(primes) # Compute Y1 if not primes_set: Y1 = 2 else: Y1_p = find_min_p(primes_set) Y1 = X * Y1_p # Compute Y2 candidates Y2_list = [] for p in primes: exp = factors[p] Y2 = X * (p ** (exp + 1)) Y2_list.append(Y2) # Compute Y3 candidates Y3_list = [] primes_list = list(primes) len_primes = len(primes_list) for i in range(len_primes): for j in range(i+1, len_primes): p_i = primes_list[i] p_j = primes_list[j] a_i = factors[p_i] a_j = factors[p_j] if a_i * a_j == 2: Y3 = X * p_i * p_j Y3_list.append(Y3) # Collect all candidates candidates = [Y1] + Y2_list + Y3_list min_Y = min(candidates) print(min_Y) if __name__ == "__main__": main()