C语言快速幂

大家在求一个数的n次方时,可能会用到pow函数(在math.h中),但很容易装不下,可能会循环,也可能会超时。所以一种快速幂的方法就产生了(但也有可能超时,会极大的加快运行速度)

这道题的原理就是假如说我有一个2的10次方,可以把它变成4的五次方,再变成2乘16的二次方,以此类推

所以会区分奇偶数的情况

上代码!!!

#include<stdio.h>

int main (void)
{
    //a代表底数,b代表指数,c代表结果
    int a=0,b=0,c=1;
    scanf("%d%d",&a,&b);
    while(b)
    {
        //奇数情况专门考虑一下,剩下的一样的
        if(b%2==1)
        {
             c=c*a;               
        }
        b/=2;
        a=a*a;    
    }
    printf("%d",c);
    return 0;
}

其实这种方法是从一个求余数的题中推广出来的方法

看一下吧用到了一个数学中的结论:

各个数乘积的余数等于各个数余数的乘积的余数

(积的取余等于取余的积的取余)

#include<stdio.h>

int main (void)
{
    //依次是底数,幂,除数,
    int a=0,b=0,c=0,result=1;
    scanf("%d%d%d",&a,&b,&c);
    a=a%c;
    while(b)
    {
        if(b%2==1)
        {
             result=result*a%c;               
        }
        b/=2;
        a=a*a%c;    
    }
    //这就是最终的余数
    printf("%d",result);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值