Solovay Stassen素性檢驗方案

2021-08-02 13:15:07 字數 1748 閱讀 3995

基於尤拉判別法則的逆否命題實現的素性檢驗:

/***************************************

*                                      *

*                                      *

*           solovay-stassen            *

*                                      *

*           wuqi 10153903110           *

*                                      *

*                                      *

***************************************/

#include #include #include #include //#include using namespace std;

/// 初始條件

int n = 506941;

int limit = (n-1)/2;

int t = 10;

long long legendre  = 0;

int case_num = 1;

// 隨機返回乙個小於n的正整數b

int givearandomnumber();

// 根據尤拉判別法則的逆否命題,返回尤拉判別法則中同余式的最小正剩餘

long long eulercriterionmodule(int b);

// 用高斯引理計算b模n的勒讓德符號並返回1或-1

long long legendresymbol(int b);

int main()

//if(tmp == n-1)

//  tmp = -1;

legendre = legendresymbol(b);

cout << "the legendre symbol is " << legendre << endl;

if(tmp != legendre)

cout << endl;

cout << "**********************************/" << endl << endl;

}cout << "n = " << n << " is a prime number!" << endl;

return 0;

}int givearandomnumber()

/*pre:

post: 隨機返回乙個小於n的正整數b.

uses: time(), rand().

*/long long eulercriterionmodule(int b)

/*pre: b是乙個隨機的,小於n的正整數.

post: 根據尤拉判別法則的逆否命題,返回尤拉判別法則中同余式的最小正剩餘.

uses: 尤拉判別法則.

*/long long legendresymbol(int b)

/*pre: b是乙個隨機的,小於n的正整數.

post: 用高斯引理計算b模n的勒讓德符號並返回1或-1.

uses: 高斯引理, pow().

*/cout << s << endl;

tmp = pow(-1, s);

return tmp;

}

最大素因子

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 greyants最近正在學習數論中的素數,但是現在他遇到了乙個難題 給定乙個整數n,要求我們求出n的最大素因子的序數,例如 2的序數是1,3的序數是2,5的序數是3,以此類推.研究數論是需要很大的耐心的,為了懲罰那些沒有耐心讀完...

分解素因子

time limit 1500ms memory limit 10000k 有疑問?點這裡 假設x是乙個正整數,它的值不超過65535 即1 x 65535 請編寫乙個程式,將x分解為若干個素數的乘積。輸入的第一行含乙個正整數k 1 k 10 表示測試例的個數,後面緊接著k行,每行對應乙個測試例,包...

最大素因子

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 輸入有多組測試資料,每一行輸入乙個數字n.0輸出 在接下來的一行,輸出結果.樣例輸入 234 5樣例輸出 121 3 hdu改編 上傳者acm 李如兵 描述 greyants最近正在學習數論中的素數,但是現在他遇到了乙個難題 給定乙個...