[英]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.