首页 > 编程语言 >数据结构算法系列----快速幂

数据结构算法系列----快速幂

时间:2024-03-13 13:30:52浏览次数:15  
标签:res long x% ---- 算法 ans 数据结构 快速 mod

一、快速幂的介绍:

1、为什么要使用快速幂:

     当我们计算a的n次幂时,最先想到的肯定是c中的内置函数   pow(a,n),这个内置函数虽然简单方便,但是在实际使用中这个函数的时间复杂度是o(n),因为它是将a乘n次得到的答案。

    由于在n非常大时用pow()很容易超时,因此我们引入一个时间复杂度为o(log n)的算法——快速幂

2、快速幂的原理:

     快速幂的实现原理其实非常简单,我们可以把a的n次幂中的那个n当做一个二进制数,例如10我们把他看做 1010,我们在快速幂的算法中只考虑有1的位置,因此a的10次幂就化为,a的八次幂×a的2次幂。 (直接这样看看可能会一头雾水,可以配着下面的代码理解)

3、快速幂的代码

long long fast_power(a,n){
    int res=1;// res为1可认为现在res为0次幂
    while(n){
        if(n&1==1){res=res*a;}
        n=n>>1;// n向右移一个二进制位 搜寻下一个为1的位置
        a=a*a; // a以这种方式 从a的一次方 变为a平方 再变为a的四次方...... 刚好与为1的位置对应
    }
    return res;
}

二、快速幂的进阶(答案要取mod):

话不多说直接上 例题和ac代码:https://ac.nowcoder.com/acm/problem/15187

#include<bits/stdc++.h>
using namespace std;
long long mod;
long long fast(long long x,long long n){
    x=x%mod;
    long long ans=1;
    while(n){
        if(n&1==1){ans=ans*x%mod;}
        x=x*x%mod;
        n>>=1;
    }
    return ans%mod;
}
int main(){
    long long a,b,c,d;
    cin>>a>>b>>c>>d>>mod;
    cout<<fast(a,c*d)*fast(b,c*d)%mod<<endl;
}

标签:res,long,x%,----,算法,ans,数据结构,快速,mod
From: https://blog.csdn.net/2301_77961281/article/details/136634900

相关文章

  • Be Your Own Teacher: Improve thePerformance of Convolutional Neural Networks via
    摘要本文中,提出了一种名为自蒸馏的通用训练框架,该框架通过缩小网络的规模而不是扩大网络的规模,而提高卷积神经网络的性能。传统的知识蒸馏是一种网络之间的知识转换方法,它迫使学生神经网络接近预先训练的教师神经网络的softmax层输出,与此不同,所提出的自蒸馏框架提取网络......
  • C语言入门学习 --- 7.结构体
    文章目录第七章结构体1.结构体的声明1.1结构的基础知识1.2结构的声明1.3结构成员的类型1.4结构体变量的定义和初始化2.结构体成员的访问2.1结构体变量访问成员2.2结构体指针访问指向变量的成员3.结构体传参配套练习:第七章结构体1.结构体类型的声明2.结构体初始......
  • C语言入门学习 --- 9.编程练习题
    1.正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。输入:57输出:35#include<stdio.h>intmain(){ inta=0; intb=0; inti=0; scanf("%d%......
  • SQL注入攻击与防范:案例分析与最佳实践
    SQL注入是一种常见的安全漏洞,攻击者利用此漏洞向应用程序的数据库发送恶意SQL查询,以执行未经授权的操作或获取敏感数据。以下是一些预防SQL注入的常见方法:使用参数化查询:使用参数化查询可以有效防止SQL注入攻击。参数化查询将用户输入的数据作为参数传递给查询,而不是将其......
  • 智能迷惑行为揭秘:AI时代的隐形游戏
    人工智能迷惑行为大赏随着ChatGPT热度的攀升,越来越多的公司也相继推出了自己的AI大模型,如文心一言、通义千问等。各大应用也开始内置AI玩法,如抖音的AI特效~在使用过程中往往会遇到一些问题,让你不得不怀疑,这真的是人工智能吗?来分享一下人工智能的迷惑瞬间吧!方向一:人工智能的......
  • TextIn调用API教程及避坑
    一.API调用在工作台中右上角点击获取机器人,进入产品市场,可以看到所有支持识别的类型,这里以通用文字识别为例,点进去后可以发现新用户有免费的1000次额度。然后点击API文档查看详细使用说明及示例代码CommonOcr类中的id和和secret_code输入自己的Id和密码,即可实现API调用,非......
  • AI迷惑行为揭秘:如何辨别真实与虚假
    人工智能迷惑行为大赏人工智能迷惑行为大赏是一个有趣的概念,它可以用来探讨和概括人工智能系统中的一些迷惑行为。然而,作为一个AI模型,我必须强调以下几点:首先,人工智能是根据数据和算法进行训练和学习的,它不能有意识地产生迷惑行为。任何看似迷惑的行为往往是由于数据的输......
  • 谷歌破解 OpenAI 模型关键信息;微软更改默认浏览器,不再主推 Edge 丨 RTE 开发者日报 Vo
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • Golang - 三个点‘...‘的用法
    用法1)主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数(可选参数)packagemainimport"fmt"functest(args...string){//可以接受任意个string参数for_,v:=rangeargs{fmt.Println(v)}}funcmain(){varstr=[]string{......
  • 中间代码生成(Intermediate Code Generation)
    目录在编译器设计中,将高级语言代码(如C、C++、Java等)转换为低级语言(如汇编语言或机器语言)是一个复杂的过程,其中包括对不同类型的语句进行翻译。下面我将简要解释你提到的各种语句的翻译过程:声明语句的翻译:声明语句用于定义变量、类型或函数。在翻译时,编译器会为这些实体在符......