FZU1759(SummerTrainingDay04-B 欧拉降幂公式)

Posted Penn000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FZU1759(SummerTrainingDay04-B 欧拉降幂公式)相关的知识,希望对你有一定的参考价值。

Problem 1759 Super A^B mod C

Accept: 1056    Submit: 3444
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

Source

FZU 2009 Summer Training IV--Number Theory
 
 1 //2017-08-04
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 #define ll long long 
 7 
 8 using namespace std;
 9 
10 const int N = 1000010;
11 char b[N];
12 ll a, c;
13 
14 ll quick_pow(ll a, ll n, ll MOD){
15     ll ans = 1;
16     while(n){
17         if(n&1)ans = ans*a%MOD;
18         a = a*a%MOD;
19         n>>=1;
20     }
21     return ans;
22 }
23 
24 ll phi(ll n){
25     ll ans = n;
26     for(ll i = 2; i*i <= n; i++){
27         if(n%i==0){
28             ans -= ans/i;
29             while(n%i==0)
30                 n /= i;
31         }
32     }
33     if(n > 1)ans = ans - ans/n;
34     return ans;
35 }
36 
37 int main()
38 {
39     while(scanf("%lld%s%lld", &a, b, &c)!=EOF){
40         ll len = strlen(b);
41         ll MOD = phi(c), num = 0;
42         for(ll i = 0; i < len; i++)
43             num = (num*10 + b[i]-0)%MOD;
44         num += MOD;
45         printf("%lld\n", quick_pow(a, num, c));
46     }
47     return 0;
48 }

 

以上是关于FZU1759(SummerTrainingDay04-B 欧拉降幂公式)的主要内容,如果未能解决你的问题,请参考以下文章

FZU-1759 Super A^B mod C---欧拉降幂&指数循环节

指数循环节&欧拉降幂

POJ1222(SummerTrainingDay01-E)

HDU5037(SummerTrainingDay01-C)

POJ1284(SummerTrainingDay04-K 原根)

POJ2478(SummerTrainingDay04-E 欧拉函数)