处理双打时模数运算符的使用

时间:2012-07-07 23:59:36

标签: c++ c modulo

我必须找到(1 + sqrt(3))^ n的值,其中n <1。 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;
    }
}

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

3 个答案:

答案 0 :(得分:1)

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

我相信你确实需要整数结果((1 + sqrt(3))^n + (1 - sqrt(3))^n),所以你应该使用整数数学,通过在每一步用模运算进行平方来取幂。比照this question

答案 1 :(得分:0)

这种方法是不可行的。如this question所示,您需要比双类型耗材更精确的数亿个十进制数字。您正在尝试解决的问题将在here进行讨论。你们两个在同一个班级吗?

答案 2 :(得分:0)

modulo需要整数类型,你可以使用union为你的double类型与一个整数联合使用模数(如果这是C)