输入 𝑎,𝑏,求 的值。
注意结果可能很大,需要使用高精度计算。
输入格式
共一行,包含两个整数 𝑎 和 𝑏。
输出格式
共一行,输出 的值。
数据范围
1≤b≤a≤5000
输入样例:
5 3
输出样例:
10
代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int N = 5010;
int a, b, cnt;
int Primes[N], st[N], leave[N];
void GetPrime(int n)
{
for(int i = 2;i <= n;i ++)
{
if(st[i] == 0){
Primes[cnt] = i;
cnt++;
}
for(int j = 0; Primes[j]*i <= n; j++)
{
st[Primes[j] * i] = 1;
if(i % Primes[j] == 0){
break;
}
}
}
}
int GetNum(int x, int p) {
int res = 0;
while (x) {
res += x / p;
x /= p;
}
return res;
}
vector<int> HighMul(vector<int> a, int b) {
vector<int> c;
int temp = 0;
for (unsigned int i = 0; i < a.size(); i++) {
temp += a[i] * b;
c.push_back(temp % 10);
temp /= 10;
}
while (temp) {
c.push_back(temp % 10);
temp /= 10;
}
return c;
}
int main() {
cin >> a >> b;
GetPrime(a);
for (int i = 0; i < cnt; i++) {
int pt = Primes[i];
leave[i] = GetNum(a, pt) - GetNum(b, pt) - GetNum(a - b, pt);
}
vector<int> res;
res.push_back(1);
for (int i = 0; i < cnt; i++) {
for (int j = 0; j < leave[i]; j++) {
res = HighMul(res, Primes[i]);
}
}
for (int i = res.size() - 1; i >= 0; i--) {
cout << res[i];
}
return 0;
}