基於尤拉判別法則的逆否命題實現的素性檢驗:
/***************************************
* *
* *
* 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最近正在學習數論中的素數,但是現在他遇到了乙個難題 給定乙個...