麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

矩陣快速冪 非詳解

2019-11-11 07:50:25
字體:
來源:轉載
供稿:網友
#include <cstdio>#include <cstring>int n, k;const int mod = 9973;struct matrix{ int tr[10][10]; matrix Operator * (const matrix &a) const{//重載運算符 matrix tmp; memset(tmp.tr, 0, sizeof(tmp.tr)); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++){ for(int k = 0; k < n; k++) tmp.tr[i][j] += tr[i][k] * a.tr[k][j]; tmp.tr[i][j] %= mod;//這里要取模,不然可能溢出 } return tmp; }}ans, ori;matrix pow_mod(int k){ for(int i = 0; i < n; i++) ans.tr[i][i] = 1;//化為單位矩陣 while(k){ if(k&1) ans = ans*ori;//不能寫成ans *= ori,因為沒有重載*=運算符 k >>= 1; ori = ori*ori; }//核心代碼,下面有解釋}int main(){ int t; scanf("%d", &t); while(t--){ scanf("%d%d", &n, &k); memset(ans.tr, 0, sizeof(ans.tr)); memset(ori.tr, 0, sizeof(ori.tr)); for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) scanf("%d", &ori.tr[i][j]); pow_mod(k); long long res = 0; for(int i = 0; i < n; i++){ res += ans.tr[i][i] % mod; } 核心代碼:

while(k){ if(k&1) ans = ans*ori; k >>= 1; ori = ori*ori; }

假設 k = 89,其二進制為 1011001, 顯然 a^k = ( a^1 ) * ( a^8 ) * ( a^16 ) * ( a^64 ); 也就是,k的二進制位為0時,可以跳過(右移) 。

每次判斷k的最后一位二進制位,若為1,則 ans = ans*ori , 然后k右移一位,ori 乘以本身。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费在线观看毛片 | 欧洲黄视频 | 亚洲狠狠入 | 亚洲一区二区不卡视频 | 精品一区久久久 | 久久久久久久久久综合 | va免费视频 | 娇喘视频在线观看 | av日韩在线免费观看 | 久草视频福利在线观看 | 日韩精品一区二区三区中文 | 国产二区三区在线播放 | 久久91亚洲人成电影网站 | 黄色一级电影网 | 国产又粗又爽又深的免费视频 | 午夜视频免费播放 | 欧美成人精品 | 亚洲欧美日韩一区二区三区在线观看 | 国产一级毛片高清视频完整版 | 国产精品一区二区x88av | 欧美大电影免费观看 | 全黄性性激高免费视频 | 日韩欧美电影一区二区三区 | 欧产日产国产精品乱噜噜 | 亚洲爱爱图 | 欧美伦理一区二区 | 久久久一区二区 | 久久精品二区 | 羞羞答答视频 | 看免费黄色大片 | 爱爱视频天天干 | av成人免费观看 | 日本欧美一区二区三区在线观看 | 国产精品久久久久久久久久尿 | 2021狠狠操| 99影视电影电视剧在线播放 | 黄网站免费在线看 | 福利免费在线 | 久久艳片 | 激情视频免费看 | 欧美日韩一区,二区,三区,久久精品 |