[伯俊]1629次乗算/Java,Python


Baekjoon Online Judge


algorithm practice


-問題を逐次解く


20.分割征服


再帰的なアルゴリズムを応用し,分割征服を学ぶ.
Java/Python

4.乗算


1629号
分割征服による高速計算二乗の問題

この問題は出力自然数AにBを乗じた数をCの残り数で割ったものである.
  • はこのようにして実現される.
  • bの値が偶数か奇数かを理解します.
  • b=偶数:10^10->(10^5)^2形態
  • b=奇数:10^11->(10^5)^2*10形態
  • Java
  • import java.util.Scanner;
    
    public class Main {
    	public static void main(String[] args) {
    		Scanner sc = new Scanner(System.in);
    		
    		long A = sc.nextLong();
    		long B = sc.nextLong();
    		long C = sc.nextLong();
    		
    		System.out.println(power(A, B, C));
    	}
    
    	private static long power(long a, long b, long c) {
    		
    		if(b == 1) return a % c;
    		
    		long temp = power(a, b / 2, c);
    		
    		// b가 짝수일 때 
    		if(b % 2 == 0) {
    			return (temp * temp) % c;
    		// b가 홀수일 때 
    		} else {
    			return (temp * temp % c) * a % c;
    		}
    	}
    }
  • Python
  • import sys
    a, b, c = map(int, sys.stdin.readline().split())
    
    def power(a, b, c):
        if b == 1:
            return a % c
        temp = power(a, b//2, c)
        
        if b % 2 == 0:
            return (temp * temp) % c
        else :
            return (temp * temp % c) * a % c		
    
    print(power(a, b, c))