結果
| 問題 |
No.1666 累乗数
|
| コンテスト | |
| ユーザー |
dachengz
|
| 提出日時 | 2022-12-17 15:18:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 206 ms / 2,000 ms |
| コード長 | 870 bytes |
| コンパイル時間 | 386 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 77,184 KB |
| 最終ジャッジ日時 | 2024-11-16 23:35:20 |
| 合計ジャッジ時間 | 4,815 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 19 |
ソースコード
def introot(n, r):
if n <= 0:
return 0
r1 = r - 1
x = int(n ** (1.0 / r) * (1 + 1e-12))
while True:
y = (r1 * x + n // (x ** r1)) // r
if y >= x:
return x
x = y
mu = list(range(65))
for p in range(2, 65):
if mu[p] != p:
continue
q = p * p
for d in range(q, 65, q):
mu[d] = 0
for d in range(p, 65, p):
mu[d] = (mu[d] <= 0) - (mu[d] >= 0)
def count(n):
cnt = 1
e = 2
while n >> e:
if mu[e]:
cnt -= mu[e] * (introot(n, e) - 1)
e += 1
return cnt
T = int(input())
for _ in range(T):
C = int(input())
if C == 1:
print(1)
continue
lo = 1
hi = 10 ** 18
while hi - lo > 1:
md = (hi + lo) // 2
if count(md) >= C:
hi = md
else:
lo = md
print(hi)
dachengz