用 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...