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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

费马小定理求素数

發(fā)布時(shí)間:2023/11/27 生活经验 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 费马小定理求素数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

/*---------------------------------------------------
費(fèi)馬小定理:如果n是一個(gè)素?cái)?shù),a是小于n的任意正整數(shù),那么a的n次方與a模n同余。
(倆個(gè)數(shù)稱為模n同余,如果它們除以n的余數(shù)相同。數(shù)a除以n的余數(shù)稱為a取模n的余數(shù),或簡(jiǎn)稱為a取模n)

condition:
?? n is a prime
?? a < n

result:
?? a^n%n == a%n
---------------------------------------------------*/

int square(int n)
{
?return n*n;
}

/*---------------------------------------------------

計(jì)算一個(gè)數(shù)的冪對(duì)另一個(gè)數(shù)取模的結(jié)果,
確定是否素?cái)?shù)所需的步數(shù)將具有θ(log n)的增長(zhǎng)階

---------------------------------------------------*/
int expmod(int base, int exp, int m)
{
?if (0 == base)
?{
??return 1;
?}
?else if (0 == exp%2) /*exp is even*/
?{
??return square( expmod(base, exp/2, m) ) % m;
?}
?else
?{
??return (base * expmod(base, exp-1, m)) %m;
?}
}

/*---------------------------------------------------

執(zhí)行費(fèi)馬檢查需要選取位于1和n-1之間(包含這兩者)的數(shù)a,而后檢查a的n次冪取模n的余數(shù)是否等于a.

---------------------------------------------------*/
bool fermat_test(int n)
{
?int a = rand() % n; /*a random int, less than n*/

?if( a == expmod(a, n, n) )
?{
??return TRUE;
?}
?else
?{
??return FALSE;
?}
}

?

bool fermat_prime(int n, int times)
{
?if (0 == times)
?{
??return TRUE;
?}
?else if( fermat_test(n) )
?{
??return fermat_prime(n, times-1);
?}
?else
?{
??return FALSE;
?}
}

?

int _tmain(int argc, _TCHAR* argv[])
{
?bool b = is_prime(17);
?b = is_prime(88);

?b = fermat_prime(31, 5);
?return 0;
}

總結(jié)

以上是生活随笔為你收集整理的费马小定理求素数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。