题解:P13679 [IAMOI R2] 传奇模数

· · 题解

致敬传奇模数998244353

注:下文中的 mod 均指 998244353。

题目分析:

题目意思很清楚了,所以不再复述。10^{18} 的数据范围不需要高精度,开long long就可以解决。

(注意不需要开unsigned long long,尽量别开,避免出现某些意料之外的情况)

注意到向下取整,所以我们可以认为:

在区间 [mod \times k,mod \times (k+1)) 的数全部都是k

一个完整的区间有 mod 个数,而它每一项都相等,所以它的总和对mod取模一定会 =0,可以直接不用管了

所以我们只需要关注剩下的不完整的区间就可以了。不完整的区间总共有 (n\mod mod +1) 个数(有点难蚌),它们都是 \lfloor \frac{n}{mod} \rfloor,相乘一下,这道题就这么愉快地解决啦~

CODE:

#include <bits/stdc++.h>
#define int long long
#define mod 998244353
using namespace std;

int n,ans;

signed main(){

    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin>>n;
    int cnt=n%mod+1,tmp=n/mod;
    cout<<(cnt*tmp)%mod;
    return 0;
}

再见~