結果
| 問題 |
No.1666 累乗数
|
| コンテスト | |
| ユーザー |
tamato
|
| 提出日時 | 2021-09-03 23:05:07 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,297 bytes |
| コンパイル時間 | 633 ms |
| コンパイル使用メモリ | 82,840 KB |
| 実行使用メモリ | 260,148 KB |
| 最終ジャッジ日時 | 2024-12-15 17:07:24 |
| 合計ジャッジ時間 | 24,554 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 4 WA * 15 |
ソースコード
mod = 1000000007
eps = 10**-9
def main():
import sys
from bisect import bisect_left
from math import sqrt, floor
input = sys.stdin.readline
def square_root(n):
r = floor(sqrt(n))
if r ** 2 > n:
return r- 1
if (r+1) <= n:
return r+1
return r
M = 15 * 10 ** 5
MAX = 2 * 10 ** 18
S = {1}
for a in range(2, M+1):
cur = a
for b in range(2, 61):
cur *= a
if cur > MAX:
break
S.add(cur)
S = sorted(list(S))
kk = bisect_left(S, M+1)
for _ in range(int(input())):
K = int(input())
ok = MAX
ng = 0
mid = (ok + ng) // 2
while ok - ng > 1:
r = square_root(mid)
if r <= M:
j = bisect_left(S, mid+1)
if j >= K:
ok = mid
else:
ng = mid
else:
k = bisect_left(S, r+1)
j = bisect_left(S, mid + 1) + (r - M) - (k - kk)
if j >= k:
ok = mid
else:
ng = mid
mid = (ok + ng) // 2
print(ok)
assert ok != MAX
if __name__ == '__main__':
main()
tamato