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ので、各ステップでモジュロ演算で 2 乗することによる整数演算、べき乗を使用する必要があります。参照。この質問

于 2012-07-08T00:19:25.097 に答える
0

このアプローチは実行不可能です。この質問に示されているように、ダブルタイプの供給よりも数億桁の精度が必要になります。ここでは、実際に解決しようとしている問題について説明します。あなたは同じクラスの2人ですか?

于 2012-07-08T01:37:17.350 に答える
0

モジュロには整数型が必要です。モジュロを使用するために整数と結合された double 型に共用体を使用できます (これが C の場合)

于 2012-07-09T08:26:17.587 に答える