定義:
lucas-lehmer判定法:判定乙個梅森數是否是梅森素數
設p是素數,第p個梅森數為m(p)為2^p-1,r1 = 4,對於k >= 2
r(k) = (r(k+1)^2-2)modm(p), 0 <= r(k) <= m(p)
可以得到r(k)序列,則有m(p)是素數,當且僅當r(p-1) = 0(mod m(p))
**如下
miller演算法#include#includeusing namespace std;
/*利用lucas-lehmer方法判斷梅森素數
*/long long multi(long long a, long long b, long long sum)//a*b%sum與快速冪原理相同
b >>= 1;
a = (a << 1) % sum;
} return ret;
}int main()
for (int i = 2; i < p; i++)
if (rk[p - 1] == 0)
else
}system("pause");
return 0;
}
費馬小定理
費馬小定理就是說如果p是乙個質數,而整數a不是p的倍數,則有a^(p-1)≡1(mod p)。也可以寫做a^p ≡ p (mod p).
二次探測
如果p是乙個素數,那麼使得x2 ≡ 1 (mod p)的 x的解只有兩種可能,就是x = 1 或者 x = p-1
**如下
#include#include#includeusing namespace std;
/*miller方法求梅森素數
*/long long random1(long long n)
long long mul(long long a, long long b, long long m)
a <<= 1;
a = a%m;
b >>= 1;
} return ans;
}long long quick_mod(long long a, long long b, long long m)
a = a*a%m;
b >>= 1;
} return ans;
}bool miller(int n)
for (int i = 0; i < 20; i++)
if (x != 1)
return false;
} return true;}
void main()
梅森素數彙總
第9個梅森素數 當p 61時,m 61 2 61 1,位數為19位,由pervushin發現於公元1883年。第10個梅森素數 當p 89時,m 89 2 89 1,位數為27位,由powers發現於公元1911年。第11個梅森素數 當p 107時,m 107 2 107 1,位數為33位,由pow...
梅森素數c 實現
梅森數 mersenne prime 指的是形如2 n 1的正整數,其中指數 n 是素數,即為。如果乙個梅森數是素數,則稱其為梅森素數。當n 2,3,5,7時,都是素數,但n 11時,顯然不是梅森素數。1722年,瑞士數學大師尤拉證明了 是乙個素數,它共有 10 位數,成為當時世界上已知的最大素數。...
Poj 1777 梅森素數
vivian s problem time limit 1000ms memory limit 30000k 題意 給100個int以內的數,每個數可以選0 10次乘到m裡,加起來必須至少選1次,初始m 1。要使得m的約數和n是2的整數次冪,並輸出最大冪次。做法 將m分解質因數,舉例說明n的計算方法...