码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基础算法之分治


    一、 快速幂

    请你计算 a^b mod p 的值。
    一共有 q 次询问。
    输入描述:
    第一行输入一个正整数 q,代表询问次数。
    接下来每行输入三个正整数 a,b,p,代表一次询问。
    数据范围:
    1≤q≤10 ^5

    1≤a,b,p≤10 ^7

    输出描述:
    对于每次询问,输出一个整数,代表 a^b mod p 的值。

    解法:

    根据公式 (a1*a2)^b %p = (a1%p)^b * (a2%p)^b %p可以进行快速幂计算
    本题不可直接计算,否则数据溢出

    #include
    using namespace std;
    long long quickpow(long long a,long long b,long long p)
    {
        long long res=1;
        while(b)
        {
            if(b&1)//如果b为奇数
                res=res*a%p;
            a=a*a%p;
            b>>=1;//相当于除2
        }
        return res;
    }
    int main()
    {
        int n;
        cin>>n;
        while(n--)
        {
            long long a,b,q;
            cin>>a>>b>>q;
            cout<<quickpow(a, b, q)<<endl;
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    二、快速乘

    请你计算 a∗b mod p 的值。要求只能使用加法和取模运算,且计算过程中的值不能超过 2*10^7
    一共有 q 次询问。
    输入描述:
    第一行输入一个正整数 q ,代表询问次数。
    接下来每行输入三个正整数 a,b,p,代表一次询问。
    数据范围:
    1≤q≤10^5

    1≤a,b,p≤10^7

    输出描述:
    对于每次询问,输出一个整数,代表a∗b mod p 的值。

    解法一:

    (a+b%p=(a%p+b%p)%p
    (a-b)%p=(a%p-b%p)%p
    (ab)%p=(a%pb%p)%p

    #include
    using namespace std;
    int main()
    {
        long long a,b,p;
        int n;
        cin>>n;
        while(n--)
        {
            cin>>a>>b>>p;
            long long k=0;//定义储存变量
            while(b--)
                k+=a%p;//累加
            cout<<k%p<<endl;//总和取模
            k=0;//归0
        }
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    解法二:

    用一般方法通过了,数据未越界,但快速幂越界

    #include
    using namespace std;
    int main()
    {
        long long a,b,p;
        int n;
        cin>>n;
        while(n--)
        {
            cin>>a>>b>>p;
            cout<<a*b%p<<endl;//总和取模
        }
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    【Oracle】基础知识面试题
    西门子200系列PLC通信编程指令讲解
    【CCPC2020长春站】【区间dp】Abstract Painting
    c++ 可变参数模版 & 编译期排序
    Electron-vue出现GET http://localhost:9080/__webpack_hmr net::ERR_ABORTED解决方案
    JVM-GC
    从ECM(企业内容管理)到内容服务——实现跨企业以及与外部合作伙伴的安全信息共享和协作
    【Exception】Error: Dynamic require of “path“ is not supported
    GPIO子系统编写LED驱动
    西瓜视频基于 Hertz 的微服务落地实践
  • 原文地址:https://blog.csdn.net/qwer1234mnbv_/article/details/126084168
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号