• FZU 1759-Super A^B mod C


    传送门:http://acm.fzu.edu.cn/problem.php?pid=1759

    Accept: 1161    Submit: 3892
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

    Problem Description

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

    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
     
     
    题意:
    给出a,b,c,求a的b次方对c取模的结果
     
    思路:
    题意好理解,但是主要是a,b,c的范围比较大,所以这里面需要一个降幂公式:
     
     1 #include<stdio.h>
     2 #include<string.h>
     3 typedef long long LL;
     4 
     5 const int MAXX = 1e6;
     6 LL c,d;
     7 char b[MAXX+10];
     8 
     9 LL quick_pow(LL a, LL b, LL mod) {
    10     LL ans = 1;
    11     while(b > 0) {
    12         if(b&1) {
    13             b--;
    14             ans = ans *a %mod;
    15         }
    16         b>>=1;
    17         a=a*a%mod;
    18     }
    19     return ans;
    20 }
    21 
    22 LL Euler (LL n) {  
    23     LL rea=n;  
    24     for(int i=2; i*i<=n; i++)  
    25         if(n%i==0)
    26         {  
    27             rea=rea-rea/i;  
    28             do  
    29                 n/=i;
    30             while(n%i==0);  
    31         }  
    32     if(n>1)  
    33         rea=rea-rea/n;  
    34     return rea;  
    35 }
    36 LL jieguo(LL a,char b[],LL c,LL mod) {
    37     LL sum = 0;
    38     sum = (b[0] - '0') % mod;
    39     LL len = strlen(b);
    40     for(int i = 1;i<len;i++) {
    41         sum*=10;
    42         sum=(sum+b[i]-'0')%mod;
    43     }
    44     return quick_pow(a,sum+mod,c);
    45 }
    46 int main() {
    47 
    48     
    49     while(scanf("%lld%s%lld", &c, b, &d)!=EOF){
    50         LL ola=Euler(d);
    51         printf("%lld
    ",jieguo(c,b,d,ola));
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    git简单介绍
    ssh常用操作
    gentoo emerge简单用法
    golang程序因未知错误崩溃时如何记录异常
    RPC实现原理(HSF、dubbo) 从头开始(一)
    websocket
    tmpfs小结
    CURL常用命令
    SVN命令详解
    3.Linux Shell流程控制
  • 原文地址:https://www.cnblogs.com/ljmzzyk/p/7308991.html
Copyright © 2020-2023  润新知