A0 + A1 * X + A2 * X ^ 2 + A3 * X ^ 3 + ... AN * X ^ n個
= A 0 + X *(A + X *(A2 + X *(A2 + ... + X *(+ 0))))
ただ、再帰的な計算をします。
ちょっとしたトリックがある品質の多数の部門の合同を算出する処理、あまりにも多くの正しさを低減しますが、高精度を避けられません。(重要)
1の#include <iostreamの> 2の#include <cstdioを> 3 使用して 名前空間STDを、 4のtypedef 長い 長LL。 5 6 のconst int型 MOD = 1E9 + 7 。 7 [LL 110 ]、S [ 1000010 ]。 8 のLL M、N、トップ。 9 10が 読み出さ11(){ 11 のLL A = 0。チャー C = GETCHAR()、L = C。 12 一方、(C < ' 0 ' || C> ' 9 ')L = C、C = GETCHAR()。 13 一方(' 0 ' <= C && C <= ' 9 ' ) 14 =(* 10 + C- ' 0 ')%MOD、C = GETCHAR()。 15 であれば(L == ' - ')のリターン ; -a 返します。 16 } 17 18 ブールチェック(LL x)から{ 19 のLLのS = 0 。 20 のためには、(int型 I = N; I> = 0; I - )、S =(S * X + [I])%MOD。 21 リターン!S; 22 } 23 24 INT メイン(){ 25 CIN >> N >> M。 26 のために(int型 I = 0 ; iが<= N; iが++)[I] = (読み取り) 27 のためには、(int型 I = 1 ; I <= M; iは++)場合(検査(I)) 28の S [++トップ] = I。 29 のprintf(" %LLDする\ n " 、上)。 30 のために(INT I = 1;私は=トップ<; Iは++)のprintf(" %のLLDを\ n " 、S [I])を、 31 リターン 0 ; 32 }