梅森素数 乘法换加法取模计算 模板

梅森数定义为Mp=2^p-1,当p为素数时,梅森数可能为梅森素数。Lucas-Lehmer判定法能高效地判断梅森数是否为素数,算法复杂度为O(p^3)。通过迭代公式R.k=(R.k-1^2-2)%Mp,直至p-1步,若结果为0,则为梅森素数。为了避免乘法溢出,可以采用加法替代。梅森素数表通常用于简化查找,同时与完美数和华林问题等数学概念相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. Mp = 2^p-1 且 p是素数,称为梅森数,若Mp是素数则称为梅森素数。
  2. Lucas-Lehmer判定法 判定一个数是否为梅森素数 效率足够高,如果题目特意为梅森素数设计,会卡复杂度,那么套用此方法即可。算法复杂度为O(p^3)。
  3. 思路:R.1 = 4;R.k = (R.k-1 ^ 2 - 2) % Mp;
    如果R.p-1 == 0,则是梅森素数,否则不是。
    2特殊判断,是梅森素数。
  4. 为了乘法溢出可以采用换加法来处理。
  5. 梅森素数表:因为个数不多所以常常可以打表
  6. 相关拓展:完美数,华林问题,蔡天新的课程
//模拟二进制乘法,及时取余防止溢出,同样的思路可以利用10进制,但是二进制更不容易溢出,且位运算较快,灵活运用。
long long multi(long long a, long long b, long long m){
    long long ans = 0;
    while(b > 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值