zoukankan      html  css  js  c++  java
  • 洛谷 P1226 【模板】快速幂||取余运算

    一个数a的n次方可能会很大,在计算过程中,虽然可以运用取模运算将a的某次幂保留在模p的范围内,但下一次的运算就有可能爆(a<=10^9;b<=10^9;c=a*b<=10^18);

    故在运算过程中,可以将a的指数k不断二分,这样,可以使它的幂分成两个较小幂的形式,在转化为long long 类型数据,可以有效防止运算结果过大。

    #include<iostream>
    
    #include<cstdio>
    
    #include<algorithm>
    
    #include<cstring>
    
    usingnamespacestd;
    
    int ksm(int b,int p,int k)
    {
    	int sum;
    	
    	if(b==0&&p!=0)
    	return0;
    	if(b==0&&p==0)
    	return0;
    	if(b!=0&&p==0)
    	return1;
    	
        sum=ksm(b,p>>1,k);
        
        sum=1ll*sum*sum%k;
        
        if(p%2==1) sum=1ll*sum*b%k;
        
        return sum;
    }
    
    int main(void)
    {
        longlong b,p,k,s;
    	
    	cin>>b>>p>>k;
    	
    	cout<<b<<"^"<<p<<" mod "<<k<<"="<<ksm(b,p,k)%k;
    	
    	return0;
    }
    

      

  • 相关阅读:
    Day10
    Day9
    Day8
    安装出错
    安装步骤
    技术面试
    工作机会查找
    selenium 关于富文本的处理
    selenium查找动态的iframe的name
    eclipse项目debug方法
  • 原文地址:https://www.cnblogs.com/jd1412/p/12456522.html
Copyright © 2011-2022 走看看