數論 梅森素數

2021-09-29 01:29:48 字數 1368 閱讀 2124

定義:

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))

**如下

#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;

}

miller演算法

費馬小定理

費馬小定理就是說如果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的計算方法...