那么,问题转化为 求
n
(
n
+
1
)
2
\frac {n(n + 1)}{2}
2n(n+1)的最大因子。
但,由于数的规模过大(1e18),我们无法直接进行 求最大因子。
进一步转化,可以对n进行奇偶分类讨论,求出 n 和 n + 1 的最小质因子(说法不太准确,具体看代码),取最小的一个,然后让
n
(
n
+
1
)
2
\frac {n(n + 1)}{2}
2n(n+1)除去最小质因子,即为最终的结果。
Code
intsolve(int x){for(int i =2; i * i <= x; i++)if(x % i ==0)return i;return x;}intmain(){
ll n; cin >> n;
ll ans =1;if(n &1) ans =min(solve(n +1>>1),solve(n));else ans =min(solve(n /2),solve(n +1));if(n ==2) ans =3;//2的结果不正确,特殊处理即可
cout << n *(n +1)/2/ ans << endl;return0;}