結果

問題 No.3364 Push_back Operation
コンテスト
ユーザー AK_Mi
提出日時 2025-11-17 22:42:46
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,206 bytes
コンパイル時間 5,600 ms
コンパイル使用メモリ 335,132 KB
実行使用メモリ 7,840 KB
最終ジャッジ日時 2025-11-17 22:42:55
合計ジャッジ時間 9,042 ms
ジャッジサーバーID
(参考情報)
judge3 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
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) {
    ll c = 1;
    while (b) {
        if (b & 1) c = (c * a) % 998244353;
        a *= a;
        a %= 998244353;
        b >>= 1;
    }
    return c % 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