x^y % m 大数

来源:互联网 发布:cf按键精灵自瞄源码 编辑:程序博客网 时间:2024/05/16 06:19


测试http://acm.fzu.edu.cn/problem.php?pid=1759

typedef long long LL ;LL   phi(LL n){     LL s = n ;     for(LL i = 2 ; i*i <= n ; i++){          if(n % i == 0)  s = s/i*(i-1) ;          while(n % i == 0) n /= i ;     }     if(n != 1)  s = s/n*(n-1) ;     return s ;}LL  Pow(LL x , LL y , LL m){    LL s = 1 ;    for( ; y ; y>>= 1){        if(y&1) { s *= x ; s %= m ;}        x *= x ; x %= m ;    }    return s;}LL   Pow(LL x , char *y , LL m){     LL phim = phi(m) ;     LL s = 0  ;     for(int i = 0 ; y[i]!= '\0' ; i++){          s = s*10 + y[i] - '0' ;          if(s >= m) break ;     }     if(s>=m){          s = 0 ;          for(int i = 0 ; y[i] != '\0' ; i++){              s = s*10 + y[i] - '0' ;              if(s >= phim) s %= phim ;          }          s += phim ;          return Pow(x , s , m) ;     }     else return Pow(x , s , m) ;}char y[1000008] ;int  main(){     LL x , m  ;     while(scanf("%I64d%s%I64d" ,&x ,y ,&m) != EOF)          printf("%I64d\n" , Pow(x , y , m)) ;     return 0 ;}


0 0
原创粉丝点击