結果
問題 | No.2795 Perfect Number |
ユーザー |
![]() |
提出日時 | 2025-03-20 21:11:24 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 42 ms / 2,000 ms |
コード長 | 1,057 bytes |
コンパイル時間 | 159 ms |
コンパイル使用メモリ | 82,648 KB |
実行使用メモリ | 54,152 KB |
最終ジャッジ日時 | 2025-03-20 21:12:15 |
合計ジャッジ時間 | 2,635 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 35 |
ソースコード
def is_prime(n):if n <= 1:return Falseelif n <= 3:return Trueelif n % 2 == 0:return Falsed = n - 1s = 0while d % 2 == 0:d //= 2s += 1bases = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37]for a in bases:if a >= n:continuex = pow(a, d, n)if x == 1 or x == n - 1:continuefor _ in range(s - 1):x = pow(x, 2, n)if x == n - 1:breakelse:return Falsereturn Truedef is_perfect_number(N):if N % 2 != 0:return Falsek = 0M = Nwhile M % 2 == 0:M //= 2k += 1if M == 1:return False # Sum of divisors is 2^(k+1)-1 < 2Ntemp = M + 1if (temp & (temp - 1)) != 0:return False # temp is not a power of twop = temp.bit_length() - 1if p != k + 1:return Falsereturn is_prime(M)N = int(input())if is_perfect_number(N):print("Yes")else:print("No")