根据等差数列求和,可以推知通项: \sum_{i=1}^n(3i-2)=3\dfrac{n(n+1)}{2}-2n=\dfrac{n(3n-1)}2 注意到 n(3n-1) >2^{64},而 \dfrac{n(3n-1)}2 < 2^{64},即直接计算会炸 ull,但是总答案不会, 而 n,3n-1 必然一个奇数一个偶数。我们可以先选取其中的偶数将其计算 \div 2 再乘以奇数,则不会爆 ull。当然用 i128 的话什么事情都没有。
#include <bits/stdc++.h>
using namespace std;
using ull = unsigned long long;
ull n, ans;
signed main()
{
cin >> n;
if (n % 2 == 0)
{
ans = n / 2 * (3 * n - 1);
}
else
{
ans = (3 * n - 1) / 2 * n;
}
cout << ans;
return 0;
}