1890. 五边形数(hard version)

根据等差数列求和,可以推知通项: \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; }