Problem 6
Sum square difference
The sum of the squares of the first ten natural numbers is,
The square of the sum of the first ten natural numbers is,
Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.
Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
平方的和与和的平方之差
前十个自然数的平方的和是
前十个自然数的和的平方是
因此前十个自然数的平方的和与和的平方之差是 3025 − 385 = 2640。
求前一百个自然数的平方的和与和的平方之差。
题目解答
朴素解法:暴力枚举
优化算法: 等差数列求和公式,平方和公式
我们在之前的博客已经推导过等差数列求和公式,这里就不重复了。 对于平方和公式的推导过程如下所示:
图表法推导:
设每一个三角形的所有项和为Sum,将三个三角形的每一项对应相加,我们可以得到
提取出2n-1,其实就是1 + 2 + ... n
立方差推导:
相对于图表法,立方差更实用一些。当我们要推倒立方和公式的时候,可以选择使用四次方差来计算。
那么可得:
题目代码
#include <stdio.h>
#include <inttypes.h>
int32_t main(int argc,char *argv[])
{
int32_t larger = (100*(1+100)/2)*(100*(1+100)/2);
int32_t smaller = ((100+1)*100*(2*100+1))/6;
printf("%d\n",larger - smaller);
return 0;
}