結果
| 問題 |
No.1666 累乗数
|
| コンテスト | |
| ユーザー |
tamato
|
| 提出日時 | 2021-09-03 23:14:48 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,446 bytes |
| コンパイル時間 | 457 ms |
| コンパイル使用メモリ | 82,480 KB |
| 実行使用メモリ | 260,092 KB |
| 最終ジャッジ日時 | 2024-12-15 17:41:50 |
| 合計ジャッジ時間 | 21,646 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 11 WA * 8 |
ソースコード
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))
for x in range(3, -4, -1):
if (r+x) ** 2 <= n:
return r
M = 15 * 10 ** 5
MAX = 2 * 10 ** 18
S_set = {1}
for a in range(2, M+1):
cur = a
for b in range(2, 70):
cur *= a
if cur > MAX:
break
S_set.add(cur)
S = sorted(list(S_set))
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
#print(ok, ng, j)
mid = (ok + ng) // 2
print(ok)
#if ok in S_set:
# print(99999)
#else:
# r = square_root(ok)
# print(r)
# assert r*r == ok
if __name__ == '__main__':
main()
tamato