1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [D3_5607] [Professional] ์กฐํ•ฉ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution{
	static long res;
	static final long num = 1234567891;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		StringTokenizer st = null;
		
		// ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค
		int TC = Integer.parseInt(br.readLine());
		
		for(int tc=1; tc<=TC; tc++) {
			sb.append("#").append(tc).append(" ");
			
			st = new StringTokenizer(br.readLine(), " ");
			
			// nCr N
			int N = Integer.parseInt(st.nextToken());
			
			// R
			int R = Integer.parseInt(st.nextToken());
			
			res = 0;
			
			// N factorial ๊ตฌํ•˜๊ธฐ
			long[] fac = new long[N+1];
			fac[0] = 1;
			for(int i=1; i<=N; i++) {
				fac[i] = (fac[i-1]*i) % num;
			}
			
			// nCr = n! / (n-r)! * r!
			// ๋ถ„์ž
			long up = fac[N];
			// ๋ถ„๋ชจ
			long down = (fac[N-R] * fac[R]) % num;
			// ํŽ˜๋ฅด๋งˆ ์†Œ์ •๋ฆฌ
			// nCr = n! * ((n-r)! * r!)^(num-2)
			long reFacDown = pow(down, num-2);
			
			// nCr ๊ณ„์‚ฐ
			res = (up*reFacDown)%num;
			
			sb.append(res).append("\n");
		}
		System.out.println(sb);
	}
	
	// aโฟ ๊ตฌํ•˜๊ธฐ ์ตœ์ ์˜ ๋ฐฉ๋ฒ•
	static long pow(long a, long N) {
		// ์กฐํ•ฉ ์„ฑ์งˆ 
		if(N==0) return 1;
		if(N==1) return a;
		// ์ง์ˆ˜์ด๋ฉด
		if(N%2==0) {
			long temp = pow(a,N/2);
			return (temp*temp)%num;
		}
		long temp = pow(a,N-1)%num;
		return (temp*a)%num;
	}
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

์ด ๋ฌธ์ œ๋Š” ์กฐํ•ฉ๋ฌธ์ œ์ด์ง€๋งŒ ์ผ๋ฐ˜ ์กฐํ•ฉ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค.
ํŽ˜๋ฅด๋งˆ ์†Œ์ •๋ฆฌ๋ฅผ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.


์œ„์—์„œ p๊ฐ€ num ๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฒฐ๊ณผ๋Š” ์‹์„ ์ด์šฉํ•ด์„œ ๊ฐ’์„ ๊ตฌํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Math.pow() ๊ณผ์ •์„ ํ•˜๊ณ  mod ๋ฅผ ํ•ด์ฃผ๊ธฐ์—๋Š” Math.pow()ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— pow๋ฅผ ์ง์ ‘ ์žฌ๊ท€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๊ณฑํ• ๋•Œ๋งˆ๋‹ค mod๋ฅผ ์ง„ํ–‰ํ•ด ๊ฐ’์ด ์ปค์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ–ˆ๋‹ค.