快速冪、矩陣快速冪、快速乘法

快速冪

快速冪是我們經常用到的一種算法,快速冪顧名思義就是快速的冪運算。我們在很多題目中都會遇到冪運算,但是在指數很大的時候,我們如果用for或者是pow就會超時,這時候就用到了快速冪。

快速冪的原理就是,當求b^p的時候,如果p是一個奇數,那么我們就可以把它拆成(b^2)^(p/2)*b,因此每次判斷一下是直接乘還是拆開就可以了。

洛谷模板鏈接:https://www.luogu.org/problemnew/show/P1226

下面是代碼:

#include<bits/stdc++.h>
using namespace std;
long long b,p,k;
void ksm(){long long ans=1,a=b,bb=b,pp=p;while(p){if(p&1) ans=ans*a%k; //判斷要不要拆開p>>=1; //p除以2a=a*a%k;}printf("%lld^%lld mod %lld=%lld",bb,pp,k,ans%k);
}
int main(){scanf("%lld%lld%lld",&b,&p,&k);ksm();return 0;
}

?


矩陣快速冪

矩陣快速冪顧名思義就是把快速冪的整數換成矩陣,要學習矩陣快速冪,就要先知道矩陣的乘法規則。矩陣的乘法規則由下圖所示:

注意:兩個矩陣可以做乘法的條件是矩陣A的大小是N*M,矩陣B的大小是M*K,這樣的兩個矩陣相乘,得到矩陣C的大小是N*K。(通俗的說就是,第一個矩陣的列數等于另一個矩陣的行數)

矩陣的乘法有幾個性質是很重要的,必須記住,不要搞混:①矩陣乘法滿足乘法結合律 ②矩陣乘法滿足乘法分配律(包括左分配律和右分配律,左分配律是:C*(A+B)=CA+CB,右分配律是:(A+B)*C=AC+BC) ③矩陣乘法不滿足乘法交換律(例:AC!=CA)。

矩陣乘法的時間復雜度是O(NMK)的,下面是矩陣乘法的代碼:

?

for(i=1;i<=n;++i)for(j=1;j<=m;++j)for(l=1;l<=k;++l)c[i][l]+=a[i][j]*b[j][l];

?

注意:在做矩陣乘法的時候,最好是按照我上面代碼的循環順序計算,因為如果你改變了循環順序,速度就會變慢,如果你不相信的話可以去試一試,這是因為按照我代碼的順序,在計算一部分值之前,他的原值已經存在緩存中了,這樣的話是比從內存中讀取快的,而改變順序的話,就會從內存中調用,就會變慢了。

學會了矩陣乘法,矩陣快速冪就很輕松了。因為矩陣快速冪和快速冪的區別就在于,一個是整數的次方運算,一個是矩陣的次方運算。但需要注意的是,在矩陣相乘的時候,要存在第三方數組中,這樣才不會影響矩陣的值。

洛谷模板鏈接:https://www.luogu.org/problemnew/show/P3390

下面是AC代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1000;
const ll mod = 1e9+7;
ll n,k,a[M][M],b[M][M],c[M][M];
void jz(int x){register int i,j,l;if(x==1){for(i=1;i<=n;++i)for(j=1;j<=n;++j)for(l=1;l<=n;++l)c[i][l]=(c[i][l]+a[i][j]*b[j][l]%mod)%mod;for(i=1;i<=n;++i)for(j=1;j<=n;++j)b[i][j]=c[i][j];memset(c,0,sizeof c);}else{for(i=1;i<=n;++i)for(j=1;j<=n;++j)for(l=1;l<=n;++l)c[i][l]=(c[i][l]+a[i][j]*a[j][l]%mod)%mod;for(i=1;i<=n;++i)for(j=1;j<=n;++j)a[i][j]=c[i][j];memset(c,0,sizeof c); //記住每次要清空
    }
}
void ksm(){while(k){if(k & 1) jz(1);k>>=1;jz(2);}
}
int main(){register int i,j;scanf("%lld",&n);scanf("%lld",&k);for(i=1;i<=n;++i)for(j=1;j<=n;++j)scanf("%lld",&a[i][j]),b[i][j]=a[i][j];--k; //因為在上一句中,在答案中已經有了矩陣A的一次方
    ksm();for(i=1;i<=n;++i){for(j=1;j<=n;++j)printf("%lld ",b[i][j]);printf("\n");}return 0;
}

?


?

快速乘法

快速乘法和快速冪的思想差不多,KSM是把a^p的p二進制分解,而快速乘法是把a*b的b分解,一般和KSM配套食用。當KSM%p會超范圍的時候,也就是取模之前就會乘爆,就要用到快速乘法。快速乘法就是把乘法改成加法,這樣一步一步的取模,就不會出現乘爆的問題了。

因為沒有找到例題,這里直接附上代碼:

typedef long long ll;
ll ksmul(ll x,ll y,int p){ //x*y%pll ans=0;while(y){if(y & 1) ans=(ans+y)%p;y>>=1;x=(x+x)%p;}return ans;
}

?

轉載于:https://www.cnblogs.com/Glacier-elk/p/9489655.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397182.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397182.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397182.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue 前端顯示圖片加token_手摸手,帶你用vue擼后臺 系列二(登錄權限篇)

完整項目地址&#xff1a;vue-element-adminhttps://github.com/PanJiaChen/vue-element-admin前言拖更有點嚴重&#xff0c;過了半個月才寫了第二篇教程。無奈自己是一個業務猿&#xff0c;每天被我司的產品虐的死去活來&#xff0c;之前又病了一下休息了幾天&#xff0c;大家…

注釋工具_蘋果已購丨Notability丨功能強大而簡單易用的筆記及PDF注釋工具

點擊上方“天澤黑科技”右上角“...”點選“設為星標”點擊加星★ 貼近你心 ?今天給大家購買效率類排行第3名的 Notability &#xff01;大家在桌面 App store 登陸我的賬號&#xff0c;搜索下載即可&#xff01;榮獲 iPad、iPhone 和 Mac 的 Apple「編」愛新 App 殊榮&#x…

第四章 大網高級 ? NSSA

STUB、完全stub、NSSA、完全nssa實驗要求&#xff1a;1、配置IP地址2、配置OSPF多區域3、配置 stub 末梢區域4、配置完全stub末梢區域5、配置 nssa 非純末梢區域6、配置完全nssa非純末梢區域7、配置兩種協議相互注入重分發8、實現全網互通一、配置OSPF多區域二、配置rip v2三、…

[AlwaysOn Availability Groups] 健康模型 Part 2 ——擴展

[AlwaysOn Availability Groups] 健康模型 Part 2 ——擴展 健康模型擴展 第一部分已經介紹了AlwayOn健康模型的概述。現在是創建一個自己的PBM策略&#xff0c;然后設置為制定的歸類。創建這些策略&#xff0c;創建之后修改一下配置&#xff0c;dashboard就會自動評估這些策略…

665. Non-decreasing Array - LeetCode

Question 665. Non-decreasing Array Solution 題目大意&#xff1a; 思路&#xff1a;當前判斷2的時候可以將當前元素2變為4&#xff0c;也可以將上一個元素4變為2&#xff0c;再判斷兩變化后是否滿足要求。 Java實現&#xff1a; public boolean checkPossibility(int[] nums…

如何制作印章_如何用Photoshop制作個性印章/文字圖片

帶印章和文字的圖片&#xff0c;不僅可以作為個人的標簽&#xff0c;更能直接表達照片的意境&#xff0c;讓片子與眾不同。那么&#xff0c;怎樣才能給照片加印章和文字呢&#xff1f;或許方法有很多&#xff0c;甚至有多款App也可以直接做效果。但想要做出精細的效果&#xff…

麒麟810處理器_麒麟810性能實測:對比驍龍845驍龍730,誰更強?

隨著榮耀9X、Nova5i Pro一眾新機發布&#xff0c;采用7nm工藝制程的全新麒麟810進入了我們的視野。以手機處理器性能劃分產品定位向來是最為直接的方法&#xff0c;在搭載麒麟810的榮耀9X將價格下探到1399元后&#xff0c;這枚網友口中“拳打845&#xff0c;腳踢730”的中端神u…

打造全鍵盤操作的PDF閱讀器

其實我只想要一個非常簡單的PDF閱讀器&#xff0c;不要很花哨的功能&#xff0c;只要能夠&#xff1a; 速度夠快&#xff0c;不要翻一頁等半天&#xff1b;全鍵盤操作&#xff0c;不想在鼠標和鍵盤之間來回倒騰&#xff1b;可以改變背景色&#xff0c;深夜的白光好刺眼&#xf…

python篩選含變量的特定行_Python SQL從特定變量字段中選擇行

我想從基于隨機變量的行中獲取一個特定的值。下面是一個示例表&#xff0c;PID列是一個“自動遞增主鍵整數”&#xff0c;其他兩列是文本示例表PID NAME PHONE--- ---- -----1 bill 999-99992 joe 888-8888我想把一個隨機變量扔到桌子上randomVariable raw_input(Enter someth…

mysql 導出dmp文件_一文帶你了解MySQL主從復制(Master-Slave)

1.復制概述Mysql內建的復制功能是構建大型&#xff0c;高性能應用程序的基礎。將Mysql的數據分布到多個系統上去&#xff0c;這種分布的機制&#xff0c;是通過將Mysql的某一臺主機的數據復制到其它主機(slaves)上&#xff0c;并重新執行一遍來實現的。復制過程中一個服務器充當…

iOS開發學無止境 - NSFileManager文件操作的十個小功能

&#xff08;配圖的小故事還記得嘛&#xff09; NSFileManager是一個單列類&#xff0c;也是一個文件管理器。可以通過NSFileManager創建文件夾、創建文件、寫文件、讀文件內容等等基本功能。 下面將介紹NSFileManager文件操作的十個小功能。我們在Documents里面進行舉例&#…

smokeping自動檢測系統

如何的使用smokeping來監控idc機房的網絡質量情況&#xff0c;從監控圖上的延時與丟包能分辨出你機房的網絡是否穩定&#xff0c;是否為多線&#xff0c;是否為BGP機房&#xff0c;到各城市的3個運行商網絡各是什么情況&#xff0c;如果出現問題&#xff0c;如果有針對的解決。…

ElasticSearch聚合分析

聚合用于分析查詢結果集的統計指標&#xff0c;我們以觀看日志分析為例&#xff0c;介紹各種常用的ElasticSearch聚合操作。 目錄&#xff1a; 查詢用戶觀看視頻數和觀看時長聚合分頁器查詢視頻uv 單個視頻uv批量查詢視頻uvHaving查詢 根據 count 進行過濾根據其它指標進行過濾…

bg感_【0328】BG推文 | 5本我在逃生游戲里養娃娃+歲月繾綣已無你+關于我比女主蘇這回事+消失的白月光又回來了等...

大家多多支持原文&#xff01;以下內容多為網絡搜集&#xff0c;非商業用途。版權歸原作者所有&#xff0c;侵聯&#xff01;BG文《我在逃生游戲里養娃娃》作者&#xff1a;鶴舫閑人《歲月繾綣已無你》作者&#xff1a;酒爺《關于我比女主蘇這回事》作者&#xff1a;歡何極《消…

android 屏幕最小寬度_AndroidTV屏幕適配-smallestWidth(最小寬度) 限定符

背景前幾天接到一個需求&#xff0c;把項目上的原來的2k屏幕適配到4k屏幕。我采用的是smallestWidth最小寬度限定符進行適配的我們項目的。1&#xff0c;smallestWidth 限定符適配原理系統都是根據限定符去尋找對應的 dimens.xml 文件。例如在最小寬度為 720dp 的設備上&#x…

mysql 組合索引

MySQL單列索引是我們使用MySQL數據庫中經常會見到的&#xff0c;MySQL單列索引和組合索引的區別可能有很多人還不是十分的了解&#xff0c;下面就為您分析兩者的主要區別&#xff0c;供您參考學習。 為了形象地對比兩者&#xff0c;再建一個表&#xff1a; CREATE TABLE myInde…

cmake使用總結(轉)---工程主目錄CMakeList文件編寫

在linux 下進行開發很多人選擇編寫makefile 文件進行項目環境搭建&#xff0c;而makefile 文件依賴關系復雜&#xff0c;工作量很大&#xff0c;搞的人頭很大。采用自動化的項目構建工具cmake 可以將程序員從復雜的makefile 文件中解脫出來。cmake 根據內置的規則和語法來自動生…

微信開發者工具 wxmi修改模版顏色_十款高效好用的在線網頁工具,提升你的辦公效率...

大家好&#xff0c; 我是阿毛&#xff0c;今天給大家推薦高效辦公的10個在線網頁工具&#xff0c;可以不用下載安裝很多app&#xff0c;也不用在電腦上裝很多軟件。在線制作精彩視頻操作非常簡單&#xff0c;選擇模板&#xff0c;上傳照片然后點擊制作等待完成就可以了&#xf…

三星ml1660拆機圖解_三星s6拆機圖解介紹

三星s6拆機圖解介紹三星s6怎么拆機?不管你是手機維修者還是狂熱的手機玩家&#xff0c;相信對您手中的三星s6內部構造和組裝步驟應該都是非常有興趣的吧?今天綠茶通過Fixit發布的三星s6拆機教程來和大家一起分享一下三星s6拆機步驟&#xff0c;從三星s6的內部構造一起來了解一…

Ajax請求利用jsonp實現跨域

跨域: js有一個同源限制,簡單說來源不一樣的話就無法相互間交互.那么怎么算來源不一樣呢, 舉個例子:瀏覽器訪問-->服務器A--->得到頁面A---頁面A中的js腳本只能訪問服務器A的資源(相同域名和端口,此外域名與對應的ip也算不同源,要么都域名,要么都ip). 以上就是js的跨域問…