[swexpert] 5607. 조합 (페르마의 정리, 재귀, java)
728x90
반응형
nCr = n! / r!(n-r)! 이다.
페르마의 정리는
A ^ (P-1) = 1이다.
A ^ (P-2) = 1/A = A ^(-1)
A = ( r!(n-r)! )
P= 문제에서 주어진수 = 1234567891
외우지 않으면 모르겠다..
package algo0419;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class S_5607_조합_Solution {
static int t,n,r;
static final long MOD=1234567891;
static long[] fact;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
fact=new long[1000001];
fact[0]=1;
for (int i = 1; i <1000001; i++) {
fact[i]=fact[i-1]*i;
fact[i]%=MOD;// 나머지로 계속 나눠준다.
}
t=Integer.parseInt(br.readLine());
for (int tc = 1; tc <=t; tc++) {
st=new StringTokenizer(br.readLine());
n=Integer.parseInt(st.nextToken());
r=Integer.parseInt(st.nextToken());
long up=fact[n];
long down=(fact[n-r]*fact[r])%MOD;
long refactoredDown=pow(down,MOD-2);
System.out.printf("#%d %d\n",tc,(up*refactoredDown)%MOD);
}
}
private static long pow(long a, long N) {// a의 n승 구하기 최적화방법
if(N==0)return 1;
if(N==1)return a;
if(N%2==0) {
long temp=pow(a,N/2);
return (temp*temp)%MOD;
}
long temp=pow(a,N-1)%MOD;
return (temp*a)%MOD;
}
}
728x90
반응형
'swexpert' 카테고리의 다른 글
[SWEA] 5604. 구간합 (java, 수학) (0) | 2021.04.21 |
---|---|
[swexpert] 2112. 보호 필름 (dfs, 완탐, java) (0) | 2021.04.20 |
[swexpert] 8382. 방향전환 (구현, java) (0) | 2021.04.19 |
[swexpert] 1953. 탈주범 검거 (java, bfs) (0) | 2021.04.15 |
[swexpert] 5656. 벽돌깨기 (java, bfs) (0) | 2021.04.14 |
TAGS.