2012-07-07 73 views
1

我必須找到(1 + sqrt(3))^ n的值,其中n < 10^9。因爲這個數字可能非常大,我們必須打印ans%1000000007。 我已經爲此寫了下面的函數。模數運算符在處理雙精度時的用法

double power(double x, int y) 
{ 
    double temp; 
    if(y == 0) 
     return 1; 
    temp = power(x, y/2); 
    if (y%2 == 0) 
     return temp*temp; 
    else 
    { 
     if(y > 0) 
      return x*temp*temp; 
     else 
      return (temp*temp)/x; 
    } 
} 

現在,我無法理解如何照顧模數條件。有人請幫助。

回答

1

你不能那樣做。您可以使用fmod,但由於sqrt(3)無法準確表示,所以您會得到大指數的僞造值。

我相當確信你實際上需要整數結果((1 + sqrt(3))^n + (1 - sqrt(3))^n),所以你應該使用整數數學,通過在每一步的模操作進行平方運算來求冪。比照this question

0

這種方法是不可行的。如this question所示,您需要比雙重類型電源更精確的數十萬位十進制數字。您正在嘗試解決的問題在here討論。你們是同班同學嗎?

0

模需要整數類型,你可以使用聯合爲你的雙類型聯合使用整數來使用模(如果這是C)