前十个自然数的平方的和是
1^2+2^2+…+10^2=385
前十个自然数的和的平方是
(1+2+…+10)^2=55^2=3025
因此,前十个自然数的平方和与和平方之差是3025−385=2640。
求前一百个自然数的平方的与和平方之差。
译注:注意此处出题人使用的自然数定义不包含0。
这个题可以直接通过枚举每个数,然后加上这个数的平方来求得平方和和和的平方,代码实现就很简单了,时间复杂度为0(n)
#include <stdio.h> #include <math.h> int main() { int n = 100; long long ans = 0, sum = 0; for (int i = 1; i <= n; i++) { sum += pow(i, 2); ans += i; } ans = pow(ans, 2) - sum; printf("%lld", ans); return 0; }
第二种方法就是求得平法和的公式,以及自然数和的公式了推到的过程就不写了可以在网上直接搜到,然后结果为:
1^2 + …… + n ^ 2 = n * (n + 1) * ( 2 * n + 1) / 6;
1 + ……+ n = n * (n + 1) / 2;
学会了如何求平法和的公式后也可以尝试去求立方和, 4次方和,方法是一样的;
现在的时间复杂度为O(1),代码实现如下:
#include <stdio.h> #include <math.h> int main() { int n = 100; long long ans; ans = pow(n * (n + 1) / 2, 2) - n * (n + 1) * (2 * n + 1) / 6; printf("%lld\n", ans); return 0; }
最终答案: 25164150