結果
| 問題 |
No.1666 累乗数
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-09-03 23:02:19 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 972 bytes |
| コンパイル時間 | 412 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 88,576 KB |
| 最終ジャッジ日時 | 2024-12-15 16:58:14 |
| 合計ジャッジ時間 | 59,060 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | TLE * 19 |
ソースコード
import math
def bi(b, x):
#y ** b <= x となる最大のyを求める
ok = 1
ng = math.ceil(pow(x, 1 / b)) + 100
while abs(ok - ng) > 1:
mid = (ok + ng) // 2
if mid ** b <= x:
ok = mid
else:
ng = mid
return ok - 1
def check(x, k):
#x以下の累乗数はk個以下であるか?
cnt = [0] * 100
for i in range(2, 100):
cnt[i] += bi(i, x)
for j in range(2 * i, 100, i):
cnt[j] = cnt[j] - cnt[i]
s = 1
for i in range(100):
if 2 ** i > x:
break
if cnt[i] > 0:
s += cnt[i]
if s <= k:
return True
else:
return False
def solve():
k = int(input())
k -= 1
ok = 10 ** 18
ng = 0
while abs(ng - ok) > 1:
mid = (ok + ng) // 2
if check(mid, k):
ng = mid
else:
ok = mid
print(ok)
t = int(input())
for _ in range(t):
solve()