输入 𝑎,𝑏,求
的值。
注意结果可能很大,需要使用高精度计算。
共一行,包含两个整数 𝑎 和 𝑏。
共一行,输出
的值。
1≤b≤a≤5000
5 3
10
代码:
- #include
- #include
- #include
- 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;
- }