結果
問題 |
No.36 素数が嫌い!
|
ユーザー |
![]() |
提出日時 | 2025-03-31 17:19:05 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 42 ms / 5,000 ms |
コード長 | 1,521 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 82,152 KB |
実行使用メモリ | 59,444 KB |
最終ジャッジ日時 | 2025-03-31 17:19:54 |
合計ジャッジ時間 | 2,320 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 26 |
ソースコード
def is_prime(n): if n <= 1: return False elif n <= 3: return True elif n % 2 == 0: return False d = n - 1 s = 0 while d % 2 == 0: d //= 2 s += 1 bases = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37] for a in bases: if a >= n: continue x = pow(a, d, n) if x == 1 or x == n - 1: continue for _ in range(s - 1): x = pow(x, 2, n) if x == n - 1: break else: return False return True def isqrt(n): low = 0 high = n res = 0 while low <= high: mid = (low + high) // 2 if mid * mid <= n: res = mid low = mid + 1 else: high = mid - 1 return res n = int(input()) if n == 1: print("NO") elif is_prime(n): print("NO") else: s = isqrt(n) if s * s == n and is_prime(s): print("NO") else: def smallest_prime(n): if n % 2 == 0: return 2 if n % 3 == 0: return 3 i = 5 w = 2 while i * i <= n: if n % i == 0: return i i += w w = 6 - w return n # This line is theoretically unreachable as n is composite p = smallest_prime(n) q = n // p if is_prime(q) and q != p: print("NO") else: print("YES")