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;
    }
}

现在,我无法理解如何处理模数条件。有人可以帮忙。

4

3 回答 3

1

你不能那样做。您可以使用fmod,但由于sqrt(3)无法准确表示,因此您会得到大指数的虚假值。

我相当有信心您实际上需要整数结果(1 + sqrt(3))^n + (1 - sqrt(3))^n(参看。这个问题

于 2012-07-08T00:19:25.097 回答
0

这种方法是不可行的。如this question所示,您需要比 double 类型提供的精度更高的数亿十进制数字。您实际尝试解决的问题将在此处讨论。你们两个在同一个班吗?

于 2012-07-08T01:37:17.350 回答
0

模需要整数类型,您可以将联合用于与整数联合的双精度类型以使用模(如果这是 C)

于 2012-07-09T08:26:17.587 回答