"함수 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 =...)
 
잔글 (봇: 자동으로 텍스트 교체 (-</source> +</syntaxhighlight>, -<source +<syntaxhighlight ))
 
(다른 사용자 한 명의 중간 판 하나는 보이지 않습니다)
1번째 줄: 1번째 줄:
==Java==
==Java==
[[분류: Java]]
[[분류: Java]]
<source lang='java'>
{{참고|자바 nCrMod()}}
<syntaxhighlight lang='java'>
import java.math.BigInteger;
import java.math.BigInteger;
import java.util.*;
import java.util.*;
23번째 줄: 24번째 줄:
}
}
}
}
</source>
</syntaxhighlight>
 
==같이 보기==
* [[함수 nCr()]]

2020년 11월 2일 (월) 02:49 기준 최신판

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 }}