码农知识堂 - 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
  • 相关阅读:
    FCoE测试重启调试记录
    基于SSM的游戏攻略网站
    【MongoDB-Redis-MySQL-Elasticsearch-Kibana-RabbitMQ-MinIO】Java全栈开发软件一网打尽
    Dubbo注册中心介绍
    shiro学习笔记——shiro拦截器与url匹配规则
    网络嗅探工具--Tcpdump命令
    蓝牙耳机什么牌子音质最好?音质超好的蓝牙耳机推荐
    Kubernetes:kubelet 源码分析之探针
    Netty优化-rpc
    serialVersionUID、transient关键字、Properties作为Map集合的使用、特有方法及和IO流结合的方法
  • 原文地址:https://blog.csdn.net/qwer1234mnbv_/article/details/126084168
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号