計蒜客 Fib數列問題二

2021-09-14 05:02:19 字數 1020 閱讀 5521

用 fib(n) 表示斐波那契數列的第 n項,現在要求你求 fib(n) mod m。fib(1)=1,fib(2)=1。

輸入格式

輸入 2 個整數 n(1≤n≤10^18 ),m(2≤m≤100000000)。

輸出格式

輸出 fib(n) 對 m 取模的值。

樣例輸入

100000000 100000000

樣例輸出

60546875

方法一:迭代(該方法超時)

#includeusing namespace std;

typedef long long ll;

ll cal(ll a,ll mod)

return res;

}int main()

;matrix matrix_mul(matrix a,matrix b,ll mod)

} }return c;

}matrix unit()

else

}} return res;

}matrix pow_matrix(matrix a,ll y,ll mod)

temp=matrix_mul(temp,temp,mod);

} return res;

}int main()

matrix a;

a.a[0][0]=1;

a.a[0][1]=1;

a.a[1][0]=1;

a.a[1][1]=0;

matrix b=pow_matrix(a,n-2,m);

/*for(int i=0;i<2;i++)

cout<}*/

ll ans=0;

ans=(b.a[0][0]+b.a[0][1])%m;

printf("%lld\n",ans);

return 0;

}

計蒜客 「救援」 問題

救生船從大本營出發,營救若干屋頂上的人回到大本營,屋頂數目以及每個屋頂的座標和人數都將由輸入決定,求出所有人都到達大本營並登陸所用的時間。在直角座標系的原點是大本營,救生船每次從大本營出發,救了人之後將人送回大本營。座標系中的點代表屋頂,每個屋頂由其位置座標和其上的人數表示。救生船每次從大本營出發,...

計蒜客 跳躍問題

給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。請確認你是否能夠跳躍到陣列的最後乙個下標。例如 a 2,3,1,1,4 能夠跳躍到最後乙個下標,輸出true a 3,2,1,0,4 不能跳躍到最後乙個下標,輸出false。輸入格式 第一行輸...

計蒜客 等差數列

乙個等差數列是乙個能表示成 a,a b,a 2b,a nb n 0,1,2,3,a,a b,a 2b,a nb n 0,1,2,3,的數列。在這個問題中 aa 是乙個非負的整數,bb 是正整數。寫乙個程式來找出在雙平方數集合 雙平方數集合是所有能表示成 p 2 q 2p 2 q 2 的數的集合 ss...