當前位置:吉日网官网 - 傳統節日 - 如何知道壹個大數是不是質數?

如何知道壹個大數是不是質數?

為了高速判斷?米勒-拉賓算法或aks算法。

1.約定x%y是x的模Y,即x除以Y得到的余數,當x < Y,x%y=x,所有模操作數都是整數。

X y代表x的y次方,冪運算的優先級高於乘除模,加減的優先級最低。

像這樣看x y/z,先算冪,再算除。

A/B,叫a除以B,也叫B除以a。

若A%B=0,則稱A可被B整除,也稱B可被A整除..

A*B的意思是A乘以B或者A乘以B,B乘以A,B乘以A……都壹樣。

2.費馬大定理:若n為任意正整數,p為素數,n不能被p整除(顯然n和p互質),則有:n p% p = n(即n的p次方除以p的余數為n)。

但是我查了很多資料,看到的公式都是這樣的:

(n (p-1))% p = 1經過分析,兩個公式其實是壹樣的,可以通過相互變形得到。

原來的公式可以改成:(n p-n)% p = 0(也就是n的冪減去n能被p整除,因為費馬小定理知道n的冪除以p的余數是n)。如果妳放壹個,N p變成妳的n * (n (p-1)),那麽(N)

(N*(N^(P-1)-1))%P=0

請註意上面的公式,意思是n * (n (p-1)-1)可以被p整除。

而且因為n * (n (p-1)-1)肯定能被n整除(這個不用說!)

所以n * (n (p-1)-1)是n和p的公倍數,小學知識是_

而且因為前提是N和P互質,互質數的最小公倍數是它們的乘積,所以壹定存在。

正整數m使得方程成立:n * (n (p-1)-1) = m * n * p。

兩邊截掉N,簡化為:N (P-1)-1 = m * p。

因為m是整數,顯然:n (p-1)-1)% p = 0,即:n (p-1)% p = 1。

2.費馬大定理:若n為任意正整數,p為素數,n不能被p整除(顯然n和p互質),則有:n p% p = n(即n的p次方除以p的余數為n)。

但是我查了很多資料,看到的公式都是這樣的:

(n (p-1))% p = 1經過分析,兩個公式其實是壹樣的,可以通過相互變形得到。

原來的公式可以改成:(n p-n)% p = 0(也就是n的冪減去n能被p整除,因為費馬小定理知道n的冪除以p的余數是n)。如果妳放壹個,N p變成妳的n * (n (p-1)),那麽(N)

(N*(N^(P-1)-1))%P=0

請註意上面的公式,意思是n * (n (p-1)-1)可以被p整除。

而且因為n * (n (p-1)-1)肯定能被n整除(這個不用說!)

所以n * (n (p-1)-1)是n和p的公倍數,小學知識是_

而且因為前提是N和P互質,互質數的最小公倍數是它們的乘積,所以壹定存在。

正整數m使得方程成立:n * (n (p-1)-1) = m * n * p。

兩邊截掉N,簡化為:N (P-1)-1 = m * p。

因為m是整數,顯然:n (p-1)-1)% p = 0,即:n (p-1)% p = 1。

2.費馬大定理:若n為任意正整數,p為素數,n不能被p整除(顯然n和p互質),則有:n p% p = n(即n的p次方除以p的余數為n)。

但是我查了很多資料,看到的公式都是這樣的:

(n (p-1))% p = 1經過分析,兩個公式其實是壹樣的,可以通過相互變形得到。

原來的公式可以改成:(n p-n)% p = 0(也就是n的冪減去n能被p整除,因為費馬小定理知道n的冪除以p的余數是n)。如果妳放壹個,N p變成妳的n * (n (p-1)),那麽(N)

(N*(N^(P-1)-1))%P=0

請註意上面的公式,意思是n * (n (p-1)-1)可以被p整除。

而且因為n * (n (p-1)-1)肯定能被n整除(這個不用說!)

所以n * (n (p-1)-1)是n和p的公倍數,小學知識是_

而且因為前提是N和P互質,互質數的最小公倍數是它們的乘積,所以壹定存在。

正整數m使得方程成立:n * (n (p-1)-1) = m * n * p。

兩邊截掉N,簡化為:N (P-1)-1 = m * p。

因為m是整數,顯然:n (p-1)-1)% p = 0,即:n (p-1)% p = 1。

3.積模分解公式首先有壹個引理。如果有:X%Z=0,即X能被Z整除,則有:(x+y)% z = y% z。

如果有三個正整數x,y,z,就壹定有:(x * y)% z = ((x% z) * (y% z))% z。

證明花了很長時間,還得根據情況討論:

1.當X和Y都大於Z時,必須有整數A和B才能使下面的等式成立:

X=Z*I+A(1)

Y=Z*J+B(2)

不用說,這就是模運算的本質!

將(1)和(2)代入(X*Y)modZ,我們得到:(Z*I+A)(Z*J+B))%Z,再取出Z的前三項,就轉化為:(z * (z * I * j+I * a)。

因為Z*(Z*I*J+I*A+I*B)是Z的整數倍...哦,又來了。

根據引理,公式(3)可以簡化為:(A*B)%Z並且因為:A=X%Z,B=Y%Z,所以成為原公式。

2.當X大於Z,Y小於Z時,同樣的變換:

X=Z*I+A

代入(X*Y)%Z得到:

(Z*I*Y+A*Y)%Z

根據引理,轉化為:(a * y)% z。

因為A=X%Z,Y=Y%Z,把它代入上面的公式就可以得到原來的公式。

同樣,當x小於z,y大於z時,原公式也成立。

3.當X小於Z,Y小於Z時,X=X%Z,Y=Y%Z,所以原來的公式成立。

=====================================================

4.計算冪的快速算法,如2 13,傳統方式需要12次乘法。

【cpp】查看plaincopyprint?/*計算n p */?無符號冪(無符號n,無符號p)?{ ?for(int I = 0;我& ltp;i++)n * = n;?返回n;?} ?/*計算n p */

未簽名?功率(無符號?n,無符號?p)

{

for(int?I = 0;我& ltp;i++)?n * = n

回歸?n;

該死的乘法,該優化了!保存2*2的結果,看看它是否變成:

4*4*4*4*4*4*2

然後保存4*4的結果:16*16*16*2。

1 * * * 5運算,分別是2*2,4*4,16*16*16*2。

這樣,我們的算法應該只需要計算不到壹半的乘法。

為了弄清楚這個算法,我們再舉壹個例子,2 ^ 7:2 * 2 * 2 * 2 * 2 * 2 * 2 * 2。

成對分開:(2*2)*(2*2)*(2*2)*2

如果用2*2來計算,那麽指數可以除以2,沒有多余的,以後再單獨相乘。

再次除以2: ((2 * 2) * (2 * 2)) * (2 * 2) * 2。

其實最後壹個括號裏的2 * 2這次就剩下了。然後,以後單獨相乘。現在指數是1,最後結果可以算出來:16*4*2=128。

  • 上一篇:如何折疊餐巾6種折疊餐巾的方法
  • 下一篇:孟氏家譜孟氏姓氏的由來名人孟氏姓氏的由來孟氏姓氏簡介
  • copyright 2024吉日网官网