zoukankan      html  css  js  c++  java
  • A^B mod C (快速幂+快速乘+取模)题解

    A^B mod C

    Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).

    Input

    There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space.

    Output

    For each testcase, output an integer, denotes the result of A^B mod C.

    Sample Input
    3 2 4
    2 10 1000
    
    Sample Output
    1
    24

    我用的unsigned_int64开数据。用快速幂和快速乘写,注意:不要用%,会超时(大佬说的,并且我已经验证过了...233)

    代码:

    #include<stdio.h>
    #define ull unsigned __int64
    ull mul(ull a,ull b,ull c){  
        ull res=0;
        a=a%c;
        while(b){  
            if(b & 1)	res+=a;  
            if(res>=c)	res-=c;	//代替%
            b/=2;  
            a+=a;
            if(a>=c)  a-=c; 	//代替%
        }  
        return res;
    }
    
    
    int main(){
    	ull a,b,c,ans;
    	while(scanf("%I64u%I64u%I64u",&a,&b,&c)!=EOF){
    		ans=1;
    		a=a%c;
    		while(b){
    			if(b%2==1)	ans=mul(ans,a,c);
    			a=mul(a,a,c);
    			b/=2;
    		}
    		printf("%I64u
    ",ans);
    	} 
    	return 0;
    }



     
  • 相关阅读:
    页面滚动
    tcbRouter
    http缓存策略
    Ajax跨域
    tcp 3次握手和4次挥手
    http头字段
    http工作原理
    一个下载Windows镜像的地址
    安装MySQL-8.0.13
    配置Java,jdk环境变量
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9409142.html
Copyright © 2011-2022 走看看