結果

問題 No.3505 Sum of Prod of Root
コンテスト
ユーザー askr58
提出日時 2026-04-18 15:18:49
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 981 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,782 ms
コンパイル使用メモリ 348,112 KB
実行使用メモリ 20,064 KB
最終ジャッジ日時 2026-04-18 15:19:12
合計ジャッジ時間 11,084 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 2 WA * 11
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#include <atcoder/modint>
using mint=atcoder::modint998244353;
ll isqrt(ll x){
	ll s=sqrt(x);
	while((s+1)*(s+1)<=x)s++;
	while(s*s>x)s--;
	return s;
}
using bint=__int128_t;
int main(){
	ll n;
	cin>>n;
	auto sum=[](ll l,ll r)->mint{
		auto g=[](mint x)->mint{
			return x*x*(x*x-1)/2;
		};
		auto prefix_sum=[g](ll r)->mint{
			if(r==0)return 0;
			mint mr=r;
			mint sr=isqrt(r);
			return g(sr)-g(1)+sr*(mr*(mr+1)/2-sr*sr*(sr*sr-1)/2);
		};
		return prefix_sum(r)-prefix_sum(l-1);
	};
	vector<pair<ll,int>> evs;
	vector<ll> v(60,1);
	mint cur=1;
	for(int i=3;i<60;i++){
		for(ll j=2;j<=1000000;j++){
			bint t=1;
			for(int k=0;k<i;k++){
				t*=j;
				if(t>n)break;
			}
			if(t<=n)evs.push_back(make_pair(t,i));
		}
	}
	ranges::sort(evs);
	ll l=1;
	mint ans=0;
	for(auto[r,i]:evs){
		ans+=sum(l,r-1)*cur;
		cur/=v[i];
		v[i]++;
		cur*=v[i];
		l=r;
	}
	if(l<=n)ans+=sum(l,n)*cur;
	cout<<ans.val()<<endl;
}
			


0