結果

問題 No.1666 累乗数
ユーザー H3PO4H3PO4
提出日時 2024-08-30 10:05:02
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 1,923 ms / 2,000 ms
コード長 725 bytes
コンパイル時間 2,083 ms
コンパイル使用メモリ 12,544 KB
実行使用メモリ 102,052 KB
最終ジャッジ日時 2024-08-30 10:05:45
合計ジャッジ時間 41,983 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1,807 ms
102,016 KB
testcase_01 AC 1,840 ms
101,740 KB
testcase_02 AC 1,842 ms
101,948 KB
testcase_03 AC 1,899 ms
102,048 KB
testcase_04 AC 1,823 ms
101,984 KB
testcase_05 AC 1,836 ms
101,848 KB
testcase_06 AC 1,832 ms
101,776 KB
testcase_07 AC 1,813 ms
101,888 KB
testcase_08 AC 1,818 ms
102,052 KB
testcase_09 AC 1,817 ms
101,752 KB
testcase_10 AC 1,850 ms
102,028 KB
testcase_11 AC 1,811 ms
101,892 KB
testcase_12 AC 1,820 ms
101,776 KB
testcase_13 AC 1,923 ms
101,844 KB
testcase_14 AC 1,824 ms
101,844 KB
testcase_15 AC 1,796 ms
101,828 KB
testcase_16 AC 1,868 ms
101,708 KB
testcase_17 AC 1,864 ms
101,940 KB
testcase_18 AC 1,839 ms
101,680 KB
testcase_19 AC 1,846 ms
101,684 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

from math import isqrt
from bisect import bisect_right

# 平方数でない累乗数を列挙

MAX = 10 ** 18
power_without_square = set()
for b in range(3, 64):
    a = 2
    while True:
        p = a ** b
        if p > MAX:
            break
        a += 1
        if isqrt(p) ** 2 == p:
            continue
        power_without_square.add(p)


power_without_square = sorted(power_without_square)

T=int(input())
for _ in range(T):
    N=int(input())

    # x以下の累乗数がいくつあるか二分探索
    l, r = 0, MAX
    while r - l > 1:
        m = (l + r) // 2
        ct = isqrt(m) + bisect_right(power_without_square, m)
        if ct >= N:
            r = m
        else:
            l = m
    print(r)
0