Математика на Яве (Комбинаторика)

Моя проблема:

Моя математическая формула: В этом случае X = N; Y = L;U = K;

    public class Play {

    public static void main(String args[]) {
         //n!(n−k−1)!
        int n = 10;
        int k =2;
        int l = 12;


        long result;
        result = (calculaFator(n) / calculaFator(n-k-1));
        result= (long) (result * Math.pow((n-k),(l-k)-1));
        System.out.println(result);


    }

    public static long calculaFator(long x) {
        long f = x;

        while (x > 1) {

            f = f * (x - 1);

            x--;
        }
        return f;
    }
}

Это должно быть 721599986, но это дает мне 96636764160

У меня есть несколько образцов:

При n = 10, k = 2, l = 12 это должно быть 721599986

При n = 10, k = 2, l = 16 должно быть 626284798

При n = 10, k = 1, l = 20 должно быть 674941304

При n=5, k=2, l=8 должно быть 10800

1 ответ

Java-коды работают в соответствии с вашей формулой. Кажется, что формула неверна, а не коды. (или ожидаемые результаты или ваше x,u,y отображение на n,l,k неверно?)

int x = 10;
int u = 2;
int y = 12;
long numerator = calculaFator(x);
long denominator = calculaFator(x - u - 1);

int xu1 = x - u - 1;
long result = numerator / denominator;
System.out.println();
System.out.println(x + "!= numerator: " + numerator);  //10!= numerator: 3_628_800 
System.out.println(xu1 + "!= denominator: " + denominator); //7!= denominator: 5_040 
System.out.println("result1: " + result); //result1: 720 (correct)

int xu = x - u;
int yu1 = y - u - 1;
double remainderPlaylist = Math.pow(xu, yu1);
System.out.println(xu + "^" + yu1 + " = " + remainderPlaylist);//8^9 = 1.34217728E8 
System.out.println(xu + "^" + yu1 + " = " + (long) remainderPlaylist);//8^9 = 134_217_728   (correct)

long mul = (long) (result * remainderPlaylist);
System.out.println(result + "x" + (long)remainderPlaylist + " = " + mul); //720x134_217_728 = 96_636_764_160  (mathematically correct)
Другие вопросы по тегам