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又比較大時,不要直接求,採用分佈就可以了。

發佈了90 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章