백준 11401 c++
#include <iostream>
#define MOD 1000000007
using namespace std;
int input(int lower, int upper)
{
//cout << "input()" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
long long int recursive_pow(long long int base, long long int exponent)
{
long long int temp;
if (exponent == 0)
{
return 1;
}
else
{
temp = recursive_pow(base, exponent / 2) % MOD;
temp = temp * temp % MOD;
if (exponent % 2 == 0) //지수가 짝수
{
return temp % MOD;
}
else//지수가 홀수
{
return base * temp % MOD;
}
}
}
long long int factorial(long long int a, long long int b)
{
int i;
long long int result = 1;
for (i = a; i >= a - b + 1; i--)
{
result = (result * i) % MOD;
}
return result;
}
long long int find_result(long long int N, long long int K)
{
long long int result = 0;
long long int A = 0, B = 0;
//분자
A = factorial(N, K);
//cout << A << "\n";
//분모
B = factorial(K, K);
//cout << B << "\n";
//결과//페르마의 소정리
result = (A * recursive_pow(B, MOD - 2)) % MOD;
return result;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
long long int N, K;
N = input(1, 4000000);
K = input(0, N);
cout << find_result(N, K) << "\n";
return 0;
}