カウント
時間制限:6000/3000 MS(Javaの/その他)メモリの制限:65536分の65536 K(Javaの/その他)
の合計提出(S):1187受理提出(S):433
問題の説明
。ファーマージョンのn-牛
:デイ牛は特別な方法で牛の数をカウントする
牛1の最初の数、二牛の第2、第三牛の後、場合牛の現在の頭はその後数の2倍の彼の最初のn-2牛プラスのn-1牛の番号に加えてその数のための彼らの現在のn乗の数で、nは。
今ファーマージョンはそれは限り、あなたの出力回答を法として123456789のため、答えは素晴らしいものだと推定され、最初の数nは牛の数で、知りたいです。
:デイ牛は特別な方法で牛の数をカウントする
牛1の最初の数、二牛の第2、第三牛の後、場合牛の現在の頭はその後数の2倍の彼の最初のn-2牛プラスのn-1牛の番号に加えてその数のための彼らの現在のn乗の数で、nは。
今ファーマージョンはそれは限り、あなたの出力回答を法として123456789のため、答えは素晴らしいものだと推定され、最初の数nは牛の数で、知りたいです。
入力
第一の入力線Tは、Tは、サンプルの集合を表し有する
(N> = 3)T線以下、各ラインは正の整数N、N-牛を有する
場合、T = 10 ^ 4、N <= 10 ^ 18
(N> = 3)T線以下、各ラインは正の整数N、N-牛を有する
場合、T = 10 ^ 4、N <= 10 ^ 18
出力
総Tライン、各ラインは、答えを聞いて、正の整数を表し、
サンプル入力
53691215
サンプル出力
31700748664651527023
考え
再帰的な式を考える:F [I] = F [I-1] + 2 * F [I-2] + N ^ 3
マトリックスを構築することができます。
マトリックスソルバーは、高速電力を使用することができます
コード
1つの#include <ビット/ STDC ++ H> 2 の#defineっ長い長い 3つ の#define ULLのunsigned long長い 4つ の#define MS(B)のmemset(A、B、はsizeof(a))は 5 CONST INT INF = 0x3f3f3f3f 。 6 CONST LL INF = 0x3f3f3f3f3f3f3f3f 。 7 のconst int型 MAXN = 1E6 + 10 。 8 CONSTの LLのMOD = 123456789 。 9 のconst int型 MAXM = 1E3 + 10 。 10 使って 名前空間はstdを、 11 構造体マート 12 { 13の LL M [ 6 ] [ 6 ]。 14 }手段と 15 マートMULT(マートX、Yマート) 16 { 17の マートANS。 18 のためには、(int型 i = 0 ; iは< 6 ; iは++ ) 19 { 20 のための(int型 J = 0 ; J < 6 ; J ++ ) 21 { 22 ans.m [I] [J] = 0 ; 23 のための(int型K = 0 ; K < 6あり、k ++ ) 24 { 25 ans.m [I] [J] + = XM [I] [K] * YM [K] [J]。 26 ans.m [I] [J]%= MOD。 27 } 28 } 29 } 30の リターンANS。 31 } 32 ボイドのinit() 33 { 34 のために(int型 i = 0 ; iは< 6 ; I ++ ) 35 unit.m [i]は[I] = 1 。 36 } 37 マートqpow(マートA、LLのB) 38 { 39 のinit(); 40の マートANS = 手段と 41 一方、(B) 42 { 43 であれば(B&1 ) 44の ANS = MULT(ANS、A)。 45 = MULT(A)。 46 B >> = 1 。 47 } 48の リターンANS。 49 } 50 のLL slove(LLのN) 51 { 52 マートA、B。 53件 のint RES [ 6 ] [ 6] = { 54 1、2、1、3、3、1 、 55 1、0、0、0、0、0 、 56 0、0、1、3、3、1 、 57 0、0、0、1、2、1 、 58 0、0、0、0、1、1 、 59 0、0、0、0、0、1 、 60 }。 61 のために(int型 I = 0 ; iが< 6 ; I ++ ) 62 のための(INT J = 0 ; J < 6 ; J ++ ) 63 AM [I] [J] = 1LL * RES [I] [J]。 64の 65 BM [ 0 ] [ 0 ] = 2 ; 66 BM [ 1 ] [ 0 ] = 1 。 67の BM [ 2 ] [ 0 ] = 8 。 68の BM [ 3 ] [ 0 ] = 4 。 69の BM [ 4 ] [ 0 ] = 2 ; 70の BM [ 5 ] [ 0 ] = 1 。 71 マートC = MULT(qpow(N- 2 )、B)。 72 リターン CM [ 0 ] [ 0 ]%MOD。 73 } 74 INTメイン(int型 ARGC、チャー CONST * ARGV []) 75 { 76 #ifndefのONLINE_JUDGE 77 freopenは(" /home/wzy/in.txt "、" R " 、STDIN)。 78 freopenは(" /home/wzy/out.txt "、" W " 、STDOUT)。 79 にsrand((符号なし整数)時間(NULL))。 80 #endifの 81 のint T。 82 のscanf(" %dの"& T); 83 LL N、 84 ながら(t-- ) 85 { 86 のscanf(" %のLLD "& n)は、 87 であれば(N == 1 || N == 2 ) 88 のprintf(" % LLDする\ n "N); 89 他90 のprintf(" %LLDする\ n "slove(N)); 91 } 92 #ifndefのONLINE_JUDGE 93 CERR << " 時間経過しました。 " << 1.0 *クロック()/ CLOCKS_PER_SEC << " 秒。「 << ENDL; 94 #endifの 95 リターン 0 ; 96 }