2012-07-07 29 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)

相关问题