证明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 }

 

posted @ 2021-12-25 13:32  scannerkk  阅读(287)  评论(0)    收藏  举报