結果
問題 |
No.889 素数!
|
ユーザー |
![]() |
提出日時 | 2020-02-01 04:05:10 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,489 bytes |
コンパイル時間 | 180 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 11,008 KB |
最終ジャッジ日時 | 2024-09-18 19:27:57 |
合計ジャッジ時間 | 3,554 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 60 WA * 1 |
ソースコード
N=int(input()) import math def isPrime(n): if n == 2: return True if n % 2 == 0: return False # nの平方根まで計算する m = math.floor(math.sqrt(n)) + 1 for p in range(3, m, 2): if n % p == 0: return False return True def bisearch(f, n): l = 0 r = n fl = f(l) fr = f(r) while l <= r: m = (l + r) // 2 fm = f(m) #print l,m,r,fl,fm,fr,n if fm == n: return m elif fm > n: r = m - 1 fr = f(r) else: l = m + 1 fl = f(l) def try_square_root(n2): return bisearch(lambda n:n*n, n2) def is_integer_num(n): if isinstance(n, int): return True if isinstance(n, float): return n.is_integer() return False def sanjoucheck(n): return is_integer_num(n**(1/3)) def sigma(n): sum = 0 # これに約数を足していく for d in range(1, n + 1): # 1とnの間の自然数が約数か確かめていく if n % d == 0: # dがnの約数なら sum += d # sumにdを加える return sum perfect=[] def perfects(l): # lまでの完全数を出力する for i in range(1, l + 1): if sigma(i) == 2 * i: perfect.append(i) return perfect if isPrime(N): print('Sosu!') elif N>=2 and try_square_root(N): print('Heihosu!') elif N>=2 and sanjoucheck(N): print('Ripposu!') elif N in perfects(N): print('Kanzensu!') else: print(N)