快速幂+大整数乘法

(快速幂+位运算)

0a,b1090p109
快速幂:
(1)取模运算法则

  • (a + b) % p = (a % p + b % p) % p
  • (a - b) % p = (a % p - b % p ) % p
  • (a * b) % p = (a % p * b % p) % p

(2)快速幂可以在O(logk)内算出akmod p的值
先处理出:
a20 mod p
a21 mod p
a22 mod p
a23 mod p
a24 mod p

a2logkmod p
只需要把k处理成二进制就可以了
那如何进行预处理呢?
a20a212=a22
全开LL避免溢出

#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
LL a,b,p;


LL qmi(LL &a,LL &b, LL &q)
{
    LL res = 1 % q;
    while(b)
    {
        if(b & 1) res = res * a % q;
        a = a * a % q;
        b >>= 1;
    }
     return res;
    
}

int main()
{
    cin >> a >> b >>p;
    cout << qmi(a,b,p)<<endl;
    
    return 0;
}

例:
求 a * b % p 的值
1a,b,p1018
Py自带高精度,所以虐杀
a = input()
b = input()
p = input()
print(a * b % p)
C++代码可以用位运算来做
可以参考上述快速幂的思想,a * b = a + a + a + a......+ a
a 2a 4a 8a 16a .....

#include<bits/stdc++.h>

using namespace std;
typedef long long LL;
LL res(LL &a, LL &b, LL &p)
{
    LL res1 = 0;
    while(b)
        {
            if(b & 1) res1 = (res1 + a) % p;
            a = a * 2 % p;
            b >>= 1;
        }
    return res1;
}

int main()
{
    LL a, b ,p;
    cin >> a >> b >> p;
    cout << res(a, b, p)<<endl;
    return 0;
}

上一章:递归实现三类枚举

posted @   Lyz103  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· Apache Tomcat RCE漏洞复现(CVE-2025-24813)
点击右上角即可分享
微信分享提示