HDU2132(可恶的数学题)

 

最近一遇到数学题就很纠结~~老是WA~校赛遇到的水题WA~~今天这题又是WA

 

1.此题为求表达式1+2+3^3+4+5+6^3+……的值,给定的n可能不是3的倍数。

2.此题若采用公式化简的方法:

  设n3的倍数:1+2+3^3+4+5+6^3+……+n^3

               =1+2+3+..+n-3+6+9+..+n+27*(1^3+2^3+3^3+..+[n/3]^3)

               =n*(n+1)/2-n*(n+3)/6+27*[n/3(n/3+1)/2]^2

  若化简到最后为: n*n*(n^2+6*n+2) /12;

3.   代码设计过程:

若采用直接利用最简公式n*n*(n^2+6*n+2) /12,是错误的。

很容易理解公式从左到右乘法得n的最高次方为4,而n最大为6位,乘起来必然超过了__int64d的表示范围。

比如n=90000时,得到结果-681050182461517205,说明有溢出。

 

 

 

解决方法:采用倒数第二步公式n*(n+1)/2-n*(n+3)/6+27*[n/3(n/3+1)/2]^2,求sum

sum=n/3*(n/3+1)/2;

    sum*=sum;

    sum=sum*27+n*(n+1)/2-n*(n+3)/6;

这样就可以了!!

 总结:当遇到求解公式,而公式中有n^4等等,n又比较大时,不要直接求,采用分布就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值