日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字迷阵(矩阵快速幂+结论题)

發布時間:2023/12/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字迷阵(矩阵快速幂+结论题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數字迷陣(矩陣快速冪+結論題)

題目描述

小可可參觀科學博物館時,看到一件藏品,上面有密密麻麻的數字,如下所示: ??
1 ? 2 ? 3 ? 5 ? ?8 ? ?13 ? 21 ? 34 ? 55 ? ?89 ? ?144 … ??
4 ? 7 ? 11 ?18 ? 29 ? 47 ? 76 ? 123 ?199 ? 322 ? 521 … ??
6 ? 10 ?16 ?26 ? 42 ? 63 ? 110 ?178 ?288 ? 466 ? 754 … ??
9 ? 15 ?24 ?39 ? 63 ? 102 ?165 ?267 ?432 ? 699 ? 1131 … ??
12 ?20 ?32 ?52 ? 84 ? 136 ?220 ?356 ?576 ? 932 ? 1508 … ??
14 ?23 ?37 ?60 ? 97 ? 157 ?254 ?411 ?665 ? 1076 ?1741 … ??
17 ?28 ?45 ?73 ? 118 ?191 ?309 ?500 ?809 ? 1309 ?2118 … ??
19 ?31 ?50 ?81 ? 131 ?212 ?343 ?555 ?898 ? 1453 ?2351 … ??
22 ?36 ?58 ?94 ? 152 ?246 ?398 ?644 ?1042 ?1686 ?2728 … ??
25 ?41 ?66 ?107 ?173 ?280 ?453 ?733 ?1186 ?1919 ?3105 … ??
27 ?44 ?71 ?115 ?186 ?301 ?487 ?788 ?1275 ?2063 ?3338 … ??
… ??
仔細一分析,發現還挺有規律。 ??
原來,第一行是Fibonacci數列。即,該行中除了第一個和第二個數分別為1和2之外,其他數都是其左側相鄰的兩個數之和。 ??
其后各行也類似于Fibonacci數列。只是第i行的第一個數是前 行中未出現的最小正整數,而其第二個數與該行第一個數以及所在行的編號相關,即A[i,2]=A[i,1]*2-(i-1) 。如在第一行中未出現的最小正整數為4,前三行中未出現的最小正整數為9。故第二行以4和7開頭,而第四行以9和15開頭。 ??
小可可高興地把這個發現告訴了爺爺。爺爺問道:你能否一口報出第i行、第j列的那個數對m取模的結果是多少呢? ??
聰明的小可可通過心算就能知道答案。你是否能編寫程序求解呢?

?

輸入

每行有三個分別用一個空格隔開的正整數,分別是i、j和m。其中,i, j<=1000000000 ,2<=m<=10000 。 ??

?

輸出

每行輸出對應的第i行、第j列的那個正整數對m取模的結果。

?

樣例輸入

復制樣例數據

1 2 99

樣例輸出

2

ps:第一列之差3 2 3 3 2 3 2 3 3 2 ,然后就有人推出結論,每一行第一個數為,i-1+i*((1+sqrt(5))/2;? ? ? ? ? ? ? ? ?神奇!

#include <bits/stdc++.h>using namespace std; typedef long long ll;struct mat{ll m[2][2]; }unit; ll m,a,b; mat operator*(mat a,mat b){mat ret;memset (ret.m,0, sizeof (ret.m));for(int i=0;i<2;i++) {for(int j=0;j<2;j++) {for(int k=0;k<2;k++) {ret.m[i][j]=(ret.m[i][j]+a.m[i][k]*b.m[k][j]%m)%m;}}}return ret; }void init() {for(int i=0;i<2;i++) unit.m[i][i]=1;return; }mat pow_mat(mat a,ll n){mat ret=unit;while (n){if(n&1) {ret=ret*a;}n>>=1;a=a*a;}return ret; }int main() {init ();scanf ("%lld%lld%lld",&a,&b,&m);ll f1=a-1+a*(sqrt (5)+1)/2;ll f2=f1*2-(a-1);mat A={1,1,1,0};mat B={f2,f1,0,0};mat C=pow_mat (A,b-1);C=B*C;cout<<C.m[0][1]<<endl;return 0; }

?

?

?

?

總結

以上是生活随笔為你收集整理的数字迷阵(矩阵快速幂+结论题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。