证明1^2+2^2+......+n^2
证明1^2+2^2+.......+n^2=1/6*n*(n+1)*(2*n+1)
利用恒等式可知(1+n)^3 = n^3 + 3*n^2 + 3*n + 1
移项可知(1+n)^3 - n^3 = 3*n^2+3*n+1
可得2^3 - 1^3 = 3*1 + 3*1 + 1
可看出1+n到2有n项,把这n项相加得
(1+n)^3 -1 = 3*(1^2+2^2+......+n^2)+3*(1+2+.......+n) + n
其中(1+2+.......+n)利用等差数列求和公式可得sn = n(a1+an)/2 = n(1+n)/2
原式可化为(1+n)^3 - 1 = 3*(1^2+2^2+......+n^2) +3*n*((1+n)/2 + n
移项可得(1+n)^3 - 1 - 3*n*(1+n)/2 - n = 3*(1^2+2^2+......+n^2)
化简得n^3 + (3*n^2-3*n)/2 + 3*n - n = 3*(1^2+2^2+......+n^2)
两边同时乘2得2*n^3 + 3*n^2 -3*n + 4*n = 6 * (1^2+2^2+......+n^2)
得到2*n^3 + 3*n^2 +n = 6 * (1^2+2^2+......+n^2)
得到n(2*n^2 + 3*n +1) = 6 * (1^2+2^2+......+n^2)
利用十字相乘可得n(n+1)(2n+1) = 6 * (1^2+2^2+......+n^2)
证毕!
1.利用循环遍历的代码:
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long ll; 4 int main() 5 { 6 int n; 7 ll sum = 0; 8 cin >> n; 9 for(int i = 1;i <= n;i++)//对1000000008求余 10 sum = (sum % 1000000008 + (i*i) % 1000000008) % 1000000008; 11 cout << sum << endl; 12 return 0; 13 }
2.利用公式求解代码:
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long ll; 4 int main() 5 { 6 ll n; 7 ll sum = 0; 8 cin >> n; 9 sum = (n * (n+1)*(2*n+1))/6; 10 cout << sum << endl; 11 return 0; 12 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}

浙公网安备 33010602011771号