BOJ_S1_1629
π [S1_1629] κ³±μ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static long C;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
long A = Integer.parseInt(st.nextToken());
long B = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
System.out.println(pow(A,B));
}
static long pow(long a, long b) {
if(b==1) {
return a % C;
}
// μ§μλ₯Ό 1/2 ν κ°μ ꡬν΄μ£ΌκΈ° -> μ§μ λ²μΉ a^b = a^b/2 * a^b/2
long temp = pow(a, b/2);
// μ§μκ° νμ μΌ κ²½μ°
// λͺ¨λλ¬ λ²μΉ (a * b) % c = ((a%c) * (b%c))%c
if(b % 2 == 1) {
return (temp * temp % C) * a % C ;
}
// μ§μ μΈ κ²½μ°
return temp * temp % C;
}
}
π€ λμ μκ°
λ¬Έμ λ§ λ³΄λ©΄ κ°λ¨ν λ¬Έμ μ§λ§ μμ λ²μμ μκ°λ³΅μ‘λλ₯Ό μκ°νλ©΄ κ·Έλ κ² κ°λ¨ν λ¬Έμ λ μλμλ κ² κ°λ€.
κ°λ¨ν μκ°νλ©΄ Bμ κ³±ν΄μ Cλ‘ λλ μ£Όλ λλ¨Έμ§λ° μκ°μ΄ 0.5μ΄κΈ° λλ¬Έμ A,B,Cμ λ²μλ₯Ό λ΄μλ λΆκ°λ₯νλ€.
κ·Έλμ μκ°ν΄ λ΄μΌνλ λ°©λ²μ μ§μ λ²μΉκ³Ό λͺ¨λλ¬ λ²μΉμ΄λ€.
λ¨Όμ μ§μ λ²μΉμ 2μ 4μΉμ 2μ 2μΉ κ³±νκΈ° 2μ 2μΉμΌλ‘ λλ μ§λ€λ κ±°κ³ ,
λͺ¨λλ¬ μ°μ°μ (a * b) % c = ((a%c) * (b%c))%c μ΄ κ³΅μμ΄ μ±λ¦½νλ€λ κ²μ΄λ€.
κ·Έλμ λ¨Όμ pow λΌλ λ©μλμ μ§μκ° 1μΈ κ²½μ°μλ κ·Έλ₯ Aμμ Cλ₯Ό λλ λλ¨Έμ§λ₯Ό 리ν΄ν΄μ£Όκ³
μ§μκ° νμ μΈ κ²½μ°μλ μ§μ λ²μΉμ μνν μλΌλ¦¬ κ³±ν΄μ£Όκ³ λ§μ§λ§μ μλ κ°μ νλ²λ κ³±ν΄μ£Όλ κ²μ΄λ€. κ·Έλ¦¬κ³ κ±°κΈ°μ λͺ¨λλ¬ μ°μ°μ μ΄μ©ν΄ κ°μ ꡬνλ€.
λ§μ§λ§ μ§μ μΈ κ²½μ°μλ μ§μλ²μΉμ λͺ¨λλ € μ°μ°μ μννμ¬ κ°μ ꡬν΄μ£Όμλ€.
λλ μ§μ λ²μΉκ³Ό λͺ¨λλ¬ μ°μ°μ λ μ¬λ¦¬μ§ λͺ»ν΄ μ°Ύμ보λ€κ° μκ²λ κ²μΈλ° μ°Έ.. μν곡μλ λ§μ΄ μκ³ μμ΄μΌ λμμ΄ λ κ² κ°λ€..γ