結果

問題 No.3364 Push_back Operation
コンテスト
ユーザー AK_Mi
提出日時 2025-11-17 23:06:09
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,309 bytes
コンパイル時間 5,075 ms
コンパイル使用メモリ 335,012 KB
実行使用メモリ 7,852 KB
最終ジャッジ日時 2025-11-17 23:06:20
合計ジャッジ時間 9,758 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 27 WA * 26
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using ld = long double;
ll intpow(ll a, ll b) {
    if(b == 1)return a;
    if(b == 0)return 1;

    if(b % 2 == 1){
        ll ret = intpow(a,(b-1)/2);
        ret = (ret*ret)% 998244353;
        return (ret * a)% 998244353;
    }else{
        ll ret = intpow(a,b/2);
        return (ret * ret)% 998244353;
    }
}
ll sums(ll a, ll r){
    if(r == 1){
        return 1;
    }
    if(r % 2 == 1){
        r--;
        ll ret = (sums(a,r/2) * (intpow(a,r/2)+ 1))% 998244353;
        ret += intpow(a,r);
        return ret % 998244353;
    }else{
        ll ret = (sums(a,r/2) * (intpow(a,r/2)+ 1))% 998244353;

        return ret;
    }
        
}

int main(){
    ll n;
    cin >> n;

    ll ans = 0;

    ll p = n;

    for(ll i = 1; i * i < n; i++){
        ll a = ll(n / (i+1)) + 1;
        if(i == 1)ans += p - a + 1;
        else{
            ll pows = intpow(i,a);
            ll r = p - a + 1;
            ll wa = sums(i,r);
            ans += (pows * wa)% 998244353;
        }
        ans %= 998244353;
        p = a - 1;
    }

    for(ll i = 1; i <= p; i++){
        ll a = n / i;
        ans += intpow(a,i);
        ans %= 998244353;
    }

    cout << ans << '\n';

    return 0;
}
0