結果

問題 No.3228 Very Large Fibonacci Sum
ユーザー ジュ・ビオレ・グレイス
提出日時 2025-07-15 15:15:03
言語 D
(dmd 2.109.1)
結果
RE  
(最新)
AC  
(最初)
実行時間 -
コード長 971 bytes
コンパイル時間 981 ms
コンパイル使用メモリ 88,652 KB
実行使用メモリ 7,720 KB
最終ジャッジ日時 2025-07-20 02:08:59
合計ジャッジ時間 2,056 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample RE * 3
other RE * 23
権限があれば一括ダウンロードができます

ソースコード

diff #

import std.stdio, std.algorithm, std.array, std.conv, std.typecons;

immutable p = 1000000007L;

void main() {
	auto N = readln[0 .. $-1].to!long;
	auto M = Matrix(
		1, 0, 0,
		0, 1, 0,
		0, 0, 1
	);
	auto A = Matrix(
		2, 0, -1,
		1, 0, 0,
		0, 1, 0
	);
	auto power = 1L;
	
	while (power <= N) {
		if ((N & power) != 0) M = multiply(A, M);
		A = multiply(A, A);
		power *= 2;
	}
	
	auto mod = (M[6]*4 + M[7]*2 + M[8]*1) % p;
	writeln(mod < 0 ? mod + p : mod);
	
}

// 0 1 2
// 3 4 5
// 6 7 8
alias Matrix = Tuple!(long, long, long, long, long, long, long, long, long);

Matrix multiply(Matrix a, Matrix b) {
	return Matrix(
		(a[0]*b[0]+a[1]*b[3]+a[2]*b[6]) % p, (a[0]*b[1]+a[1]*b[4]+a[2]*b[7]) % p, (a[0]*b[2]+a[1]*b[5]+a[2]*b[8]) % p, 
		(a[3]*b[0]+a[4]*b[3]+a[5]*b[6]) % p, (a[3]*b[1]+a[4]*b[4]+a[5]*b[7]) % p, (a[3]*b[2]+a[4]*b[5]+a[5]*b[8]) % p, 
		(a[6]*b[0]+a[7]*b[3]+a[8]*b[6]) % p, (a[6]*b[1]+a[7]*b[4]+a[8]*b[7]) % p, (a[6]*b[2]+a[7]*b[5]+a[8]*b[8]) % p
	);
}
0