Help Me Title is too short (minimum is 15 characters)

Hänschen dreams he is in a shop with an infinite amount of marbles. He is allowed to select n marbles. There are marbles of k different colors. From each color, there are also infinitely many marbles. Hänschen wants to have at least one marble of each color, but still there are a lot of possibilities for his selection. In his effort to make a decision he wakes up. Now he asks you how many possibilities for his selection he would have had. Assume that marbles of equal color can’t be distinguished, and the order of the marbles is irrelevant.

Input Format
The first line of input contains a number ‘T’ that indicates the number of test cases to follow. Each test case consists of one line containing n and k, where n is the number of marbles Hänschen selects and k is the number of different colors of the marbles.

Constraints
1<=T<=100 1<=k<=n<=1000000

Output Format
For each test case print the number of possibilities that Hänschen would have had. You can assume that this number exceeds the limit of a signed 64-bit integer.

Sample Input
2
10 10
30 7
Sample Output
1
475020

MY Code:
#include<bits/stdc++.h>
#include
#define l unsigned long long int
using namespace std;

l factorial(l n){
if(n == 1 || n == 0){
return 1;
}

return n*factorial(n-1);

}

l answer(l n,l k){
return (factorial(n-1)/(factorial(k-1)*factorial(n-(k-1))));
}

int main(){
l t;
cin>>t;
while(t–){
l n,k;
cin>>n>>k;
cout<<answer(n,k)<<endl;
}
return 0;
}

Hi @amangoel987357

You cannot directly calculate factorials for n-1 and k-1 as they would be very large. As we have to calculate n-1Ck-1 , you can calculate step by step by taking ans = 1, then from 1 1 to k-1 multiplying ans by (n-i) and dividing by (i). Hence ans would not overflow.

Hope it Helps.