結果

問題 No.3505 Sum of Prod of Root
コンテスト
ユーザー titia
提出日時 2026-04-23 03:45:02
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
TLE  
実行時間 -
コード長 1,194 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 125 ms
コンパイル使用メモリ 85,148 KB
実行使用メモリ 281,396 KB
最終ジャッジ日時 2026-04-23 03:45:26
合計ジャッジ時間 6,305 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample -- * 1
other AC * 3 TLE * 1 -- * 9
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

# 解説を見た。
# 一瞬、不可能では? と思ったけど、ちゃんと考えて解ける問題だった。

# k>=3のi**(1/k)で区切ろうというのは思いつく。
# 式変形が大変。
# ただ、k*2<=i<=(k+1)*(k+1)のときint(i**0.5)がkになるということに気付けば、
# 式変形が可能そうだとは思うことは可能そう。

import sys
input = sys.stdin.readline

mod=998244353

N=int(input())

X=[]


def f(n):
    m=int(n**(1/2))+1

    while n<m*m:
        m-=1

    return (m-1)*m*(m+1)*(8*m*m-5*m-2)//20 + m*(n-m*m)*(n+m*m-1)//2

X=[]
for i in range(3,65):
    for j in range(1,10**6+100):
        k=j**i

        if k<=10**18+10**14:
            X.append(k)
        else:
            break

X=sorted(set(X))

ANS=0

for i in range(len(X)):
    c=X[i]
    c2=X[i+1]

    k=1

    for j in range(3,65):
        x=max(1,int(c**(1/j))+3)
        #print(x,c,j)

        while x**j>c:
            x-=1

        #print(x,c,j)
        k=k*x%mod

        if x==1:
            break
        

    if c2>N:
        ANS+=(f(N+1)-f(c))*k
        break
    else:
        ANS+=(f(c2)-f(c))*k

    #print(c,c2,ANS)
    ANS%=mod

print(ANS%mod)
    
    
0