1 /* 2 我們枚舉每次選擇最大數值的情況:m個數, 投擲n次 3 最大值是1: 1種 4 2: 2^n-1 5 3: 3^n-2^n 6 ..... 7 m: m^n-(m-1)^n 8 9 所以最后的結果=sum((k/m)^n - ((k-1)/m)^n) (1<=k<=m) 10 不要這樣求(k^n/m^n)數據可能會很大! 11 */ 12 #include<iostream> 13 #include<cstdio> 14 #include<cmath> 15 using namespace std; 16 17 int main(){ 18 int n, m; 19 20 while(cin>>m>>n){ 21 double sum, cur=pow(1.0/m, n), nt; 22 sum=cur; 23 for(int i=2; i<=m; ++i){ 24 nt=pow(i*1.0/m, n); 25 sum+=(nt-cur)*i; 26 cur=nt; 27 } 28 printf("%.12lf\n", sum); 29 } 30 return 0; 31 }
?