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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

简单数论学

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单数论学 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本次內容包括:快速冪,拓展歐幾里得,同余逆元,埃氏篩法

快速冪

背景:求a的n次冪
常規方法:循環累乘 復雜度O(n)
數論方法:快速冪,使用二進制拆分分治。復雜度對數級

二進制拆分:將n從二進制角度去看,不斷二進制右移,當末位為1則乘,每次右移都會改變乘數1 2 4 8。
代碼:

int fastpow(int a,int n) {int base=a;int ans=1;while(n){if(n&1){ans*=base;}base*=base;n>>=1;} }

或者有

int fastpow(int a,int n) {int ans=1;while(n){if(n&1){ans*=a;}a=fastpow(a,a)n>>=1;} }

分治:層層拆分后分堆合并。
代碼:

int fastpow(int a,int n) {int temp;if(n==1)return a;temp=fastpow(a,n/2);if(n&1)return temp*temp*a;return temp*temp; }

temp=fastpow(a,n/2);注意這一步

拓展:矩陣快速冪
重點:將矩陣視為同快速冪中的整數元素即可。
主要操作有:定義矩陣乘法,初始化矩陣,設置單位矩陣。
0.
初始化矩陣

struct matrix {int m[50][50];matrix(){memset(m,0,sizeof(m));} };

1.矩陣乘法線性代數有學不再說明:

Matrix multi(matrix a,matrix b)//乘法二元操作 {matrix res;for(int i=0;i<50;i++){for(int j=0;j<50;j++){for(int k=0;k<50;k++){res.m[i][j]+=a.m[i][k]*b.m[k][j];//從左向右,分行乘列,層層進行}}}return res; }

2.設置單位矩陣與矩陣快速冪

int fastpow(matrix a,int n) {matrix res;for(int i=0;i<50;i++)res.m[i][i]=1;while(n){if(n&1)Matrixmulti(res,a);a=Matrixmulti(a,a);n>>=1;}return res; }

拓展歐幾里得

四步走,我之前有寫,不再寫了。

同余逆元

同余: a和b取模于m的余數相同,成為同余。
性質:a-b是m的整數倍
應用:構成二元一次方程ax+by=mn
逆元: ax和1取模于m同余。得到ax-my=1,得到ax+my=1視m為參數,加號可允許m可正可負,得到二元一次方程之后,用拓展歐幾里得求解的得出逆元
代碼:

int inverse(int a,int b) {int x,int y;exgcd(a,m,x,y);return (m+x%m)%m;//a模m的逆 }

應用:逆元與除法取模
a,b,k設k是b的逆元
則對于(a/b)%m=ak%m

求二元一次方程
如果知道了a的逆,那么可求ax與b取模m同余的方程,
設a的逆為k
x與k*b取模于m同余。

埃氏篩法

思想:找從2到n所有的素數,從頭開始,2是最小的素數,然后把2-n中所有2的倍數刪去,下一個素數是3,把所有3的倍數刪去。
實操:刪除操作可以用單鏈表,也可以用標記數組來完成。

總結

以上是生活随笔為你收集整理的简单数论学的全部內容,希望文章能夠幫你解決所遇到的問題。

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