簡體   English   中英

有什么合適的算法可以解決嗎?

[英]Any suitable algorithm to solve?

我要解決

for(n=1 to n<=<10^100){
p+=floor(e*n);

}

其中e =歐拉常數;

有什么合適的方法或算法可以在很短的時間內找到p來解決這個問題?

根據整數范圍的總和,您可以使用公式n *(n + 2)/2。要將其與e相乘,只需簡單地將n *(n + 2)/ 2 * e乘以即可。 因為您可以將e放在方括號之外..::) e * sum(從i到i的n)= sum(從i到i *的n)
例如:
1 * 3 + 2 * 3 + 3 * 3 + 4 * 3 = 3 *(1 + 2 + 3 + 4)

你可以這樣想

p = e + 2e + 3e + .... + (10^100)e

意思是

p = (1 + 2 + 3 + ... + (10^100) ) e

該項(1 + 2 + 3 + ... + (10^100))使用部分和等於((10^100)*(10^100 +1))/2

所以最終方程將是

p = ( ((10^100)*(10^100 + 1))/2 ) e

但是在Java中,這將是一個非常大的數字,您需要使用BigInteger ,但是由於您將使用具有小數點的歐拉常數,因此需要BigDecimal ,將p初始化為BigDecimal對象。

這是找到p的Java代碼,其中e = 2.71828

BigDecimal power = new BigDecimal("10");
power = power.pow(100);
BigDecimal p = ( power.multiply(power.add(new BigDecimal("1"))) ).divide(new BigDecimal("2") ).multiply(new BigDecimal("2.71828"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM