Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,71 @@
|
|||
import java.math.BigInteger;
|
||||
|
||||
public class CombinationsAndPermutations {
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(Double.MAX_VALUE);
|
||||
System.out.println("A sample of permutations from 1 to 12 with exact Integer arithmetic:");
|
||||
for ( int n = 1 ; n <= 12 ; n++ ) {
|
||||
int k = n / 2;
|
||||
System.out.printf("%d P %d = %s%n", n, k, permutation(n, k));
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
System.out.println("A sample of combinations from 10 to 60 with exact Integer arithmetic:");
|
||||
for ( int n = 10 ; n <= 60 ; n += 5 ) {
|
||||
int k = n / 2;
|
||||
System.out.printf("%d C %d = %s%n", n, k, combination(n, k));
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
System.out.println("A sample of permutations from 5 to 15000 displayed in floating point arithmetic:");
|
||||
System.out.printf("%d P %d = %s%n", 5, 2, display(permutation(5, 2), 50));
|
||||
for ( int n = 1000 ; n <= 15000 ; n += 1000 ) {
|
||||
int k = n / 2;
|
||||
System.out.printf("%d P %d = %s%n", n, k, display(permutation(n, k), 50));
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
System.out.println("A sample of combinations from 100 to 1000 displayed in floating point arithmetic:");
|
||||
for ( int n = 100 ; n <= 1000 ; n += 100 ) {
|
||||
int k = n / 2;
|
||||
System.out.printf("%d C %d = %s%n", n, k, display(combination(n, k), 50));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static String display(BigInteger val, int precision) {
|
||||
String s = val.toString();
|
||||
precision = Math.min(precision, s.length());
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(s.substring(0, 1));
|
||||
sb.append(".");
|
||||
sb.append(s.substring(1, precision));
|
||||
sb.append(" * 10^");
|
||||
sb.append(s.length()-1);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static BigInteger combination(int n, int k) {
|
||||
// Select value with smallest intermediate results
|
||||
// combination(n, k) = combination(n, n-k)
|
||||
if ( n-k < k ) {
|
||||
k = n-k;
|
||||
}
|
||||
BigInteger result = permutation(n, k);
|
||||
while ( k > 0 ) {
|
||||
result = result.divide(BigInteger.valueOf(k));
|
||||
k--;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static BigInteger permutation(int n, int k) {
|
||||
BigInteger result = BigInteger.ONE;
|
||||
for ( int i = n ; i >= n-k+1 ; i-- ) {
|
||||
result = result.multiply(BigInteger.valueOf(i));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue