原题链接:click here
本题是一题数学水题,就是公式的推导麻烦点,还有个大数的取模运算。
已知:S(n)=13+23 +33 +......+n3 .输入个n对应的输出s(n)的后四位数,如果不足四位前面补零(用输出格式控制即可)。
推导过程如下:
1):a=1+2+3+4+……+n
2a=(1+n)+(2+n-1)+(3+n-2)+……+(n+1)(倒序相加法)
=n(n+1)
所以得:a=n(n+1)/2.
2):n^3-(n-1)^3=[n^2+(n-1)^2+n(n-1)]
=2n^2+(n-1)^2-n;
所以 2^3-1^3=2*2^2+1^2-2;
3^3-2^3=2*3^2+2^2-3;
4^3-3^3=2*4^2+3^2-4;
…………
n^3-(n-1)^3=2*n^2+n^2-n;
累加上式得:
n^3-1=2(2^2+3^2+4^2+……+n^2)+(1+2^2+3^2+……+(n-1)^2)-(2+3+4+……+n)
=2(1^2+2^2+3^2+4^2+……+n^2)-2+(1+2^2+3^2+……+n^2)-n^2-(1+2+3+4+……+n)+1
=3(1^2+2^2+3^2+4^2+……+n^2)-n^2-n(n+1)/2-1
所以有:
3(1^2+2^2+3^2+4^2+……+n^2)=n^3+n^2+n(n+1)/2
=n(n+1)(2n+1)/2(提取公因式,通分)
也即 (1^2+2^2+3^2+4^2+……+n^2)=n(n+1)(2n+1)/6
3):(n+1)^4-n^4=[(n+1)^2+n^2][(n+1)^2-n^2]
=(2n^2+2n+1)(2n+1)
=4n^3+6n^2+4n+1
所以 2^4-1^4=4*1^3+6*1^2+4*1+1
3^4-2^4=4*2^3+6*2^2+4*2+1
4^4-3^4=4*3^3+6*3^2+4*3+1
…………
(n+1)^4-n^4=4*n^3+6*n^2+4*n+1
累加上式可得:
(n+1)^4-1=4(1^3+2^3+3^3+……+n^3)+6(1^2+2^2+3^2+……+n^2) +4(1+2+3+……+n)+n
=4(1^3+2^3+3^3+……+n^3)+n(n+1)(2n+1)+2n(n+1)+n
(1^3+2^3+3^3+……+n^3)=(n(n+1)/2)^2
代码如下:
#include<stdio.h> int main() { int n,s; while(scanf("%d",&n)!=EOF) { n=n%10000; s=((n*(n+1)/2)%10000)*((n*(n+1)/2)%10000)%10000;//取模之后n(n+1)/2可能超过10000,所以对其取模。再求乘积之后还有可能超过10000,再取一次模 printf("%04d\n",s); } return 0; }