题目链接:
PREV-23 数字游戏
思路:
根据题意我们易计算出第
次说出的数字为
,我们的目标即让
逐个遍历,然后求和即可;
但是略微分析可知,这个数字在计算的过程中达到
数量级,会爆long long
,而模运算若用于除法需要求逆元,略麻烦,因此我们采用累加方式求和;
我们记第
次说出的数字为
,则
,此式最多达到
数量级,因此在long long
范围之内,我们只需要维护过程中每次的
即可;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
#ifdef MyTest
freopen("Sakura.txt", "r", stdin);
#endif
ll n, mod, t;
cin >> n >> mod >> t;
ll ans = 1, rcd = 1;
for(ll i = 1; i < t; i++) {
ll dis = n * ((2 * i - 1) * n + 1) / 2 % mod;
rcd = (rcd + dis) % mod;
ans += rcd;
}
cout << ans;
return 0;
}