結果
問題 | No.534 フィボナッチフィボナッチ数 |
ユーザー |
![]() |
提出日時 | 2018-09-22 12:14:53 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,389 bytes |
コンパイル時間 | 815 ms |
コンパイル使用メモリ | 78,368 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-07-18 08:54:52 |
合計ジャッジ時間 | 1,896 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 42 |
ソースコード
#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <cmath>#include <bitset>#include <vector>#include <map>#include <set>#include <queue>#include <deque>#include <algorithm>using namespace std;typedef long long int ll;typedef pair<int, int> P;const ll MOD=1e9+7;ll mulmod(ll a, ll b, ll m){ll x=1000000000;if(m<x) return a*b%m;ll m1=m/x, m2=m%x, a1=a/x, a2=a%x, b1=b/x, b2=b%x;ll q1=a1*b1/m1, r1=a1*b1%m1;ll c=r1*x+a1*b2+a2*b1-q1*m2, d=a2*b2;ll q2, r2;if(c<0) q2=-(-c+m1)/m1;else q2=c/m1;r2=c-q2*m1;ll ans=r2*x+d-q2*m2;if(ans<0) ans=(m-(-ans%m))%m;else ans%=m;return ans;}ll fib(ll k, ll m){ll a[4]={0, 1, 1, 1}, ans[4]={1, 0, 0, 1};while(k>0){if(k%2==1){ll b[4]={mulmod(ans[0], a[0], m)+mulmod(ans[1], a[2], m), mulmod(ans[0], a[1], m)+mulmod(ans[1], a[3], m), mulmod(ans[2], a[0], m)+mulmod(ans[3], a[2], m), mulmod(ans[2], a[1], m)+mulmod(ans[3], a[3], m)};for(int i=0; i<4; i++) ans[i]=b[i]%m;}ll b[4]={mulmod(a[0], a[0], m)+mulmod(a[1], a[2], m), mulmod(a[0], a[1], m)+mulmod(a[1], a[3], m), mulmod(a[2], a[0], m)+mulmod(a[3], a[2], m), mulmod(a[2], a[1], m)+mulmod(a[3], a[3], m)};for(int i=0; i<4; i++) a[i]=b[i]%m;k/=2;}return ans[1]%m;}int main(){ll n;cin>>n;ll n1=fib(n, MOD*MOD-1);cout<<fib(n1, MOD)<<endl;return 0;}