"함수 nCrMod()"의 두 판 사이의 차이

(새 문서: ==Java== 분류: Java <source lang='java'> import java.math.BigInteger; import java.util.*; public class MyClass { static BigInteger nCrMod(int n, int r, int p) { long[] fact =...)
 
1번째 줄: 1번째 줄:
==Java==
==Java==
[[분류: Java]]
[[분류: Java]]
{{참고|자바 nCrMod()}}
<source lang='java'>
<source lang='java'>
import java.math.BigInteger;
import java.math.BigInteger;
24번째 줄: 25번째 줄:
}
}
</source>
</source>
==같이 보기==
* [[함수 nCr()]]

2019년 1월 4일 (금) 02:01 판

1 Java

import java.math.BigInteger;
import java.util.*;
public class MyClass {
	static BigInteger nCrMod(int n, int r, int p) {
		long[] fact = new long[n+1];
		fact[0] = 1;
		for(int i=1; i<=n; i++) fact[i] = fact[i-1]*i % p;
		BigInteger P = BigInteger.valueOf(p);
		BigInteger A = BigInteger.valueOf(fact[n]);
		BigInteger B = BigInteger.valueOf(fact[r]).modInverse(P).remainder(P);
		BigInteger C = BigInteger.valueOf(fact[n-r]).modInverse(P).remainder(P);
		return A.multiply(B).multiply(C).remainder(P);
	}
	public static void main(String[] args) {
	    System.out.println( nCrMod(10,2,13) ); // 6
	    System.out.println( nCrMod(1000000,1,1234567891) ); // 1000000
	    System.out.println( nCrMod(1000000,100,1234567891) ); // 882875843
	    System.out.println( nCrMod(1000000,10000,1234567891) ); // 255162549
	    System.out.println( nCrMod(1000000,1000000,1234567891) ); // 1
	}
}

2 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}