博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing - 求组合数 IV(分解质因数)
阅读量:1999 次
发布时间:2019-04-28

本文共 1706 字,大约阅读时间需要 5 分钟。

题目链接:

时/空限制:1s / 64MB

题目描述

输入a,b,求C_a^b的值。

注意结果可能很大,需要使用高精度计算。

输入格式

共一行,包含两个整数a和b。

输出格式

共一行,输出Cab的值。

数据范围

1≤b≤a≤5000

输入样例

5 3

输出样例

10

解题思路

题意:C_a^b的值

思路:当我们需要求出组合数的真实值,而非对某个数的余数时,分解质因数的方式比较好用:

假设A = p^a1*p^a2*...*p^ak,B = p^b1*p^b2*...*p^bk,则A/B = p^(a1-b1)*p^(a2-b2)*...*p^(ak-bk)。

    1. 筛法求出范围内的所有质数。

    2. 通过 C(a, b) = a! / b! / (a - b)! 这个公式求出每个质因子的次数。
       n! 中p的次数是 n / p + n / p^2 + n / p^3 + ...
    3. 用高精度乘法将所有质因子相乘。

Accepted Code:

/*  * @Author: lzyws739307453  * @Language: C++  */#include 
using namespace std;typedef long long ll;const int MAXN = 5005;bool isp[MAXN];int cnt = 0;int pre[MAXN], rat[MAXN];void prime(int n) { for (int i = 2; i <= n; i++) { if (!isp[i]) pre[cnt++] = i; for (int j = 0; j < cnt && pre[j] <= n / i; j++) { isp[i * pre[j]] = true; if (!(i % pre[j])) break; } }}int rate(int n, int p) { int res = 0; while (n) { res += n / p; n /= p; } return res;}vector
Mul(vector
a, int b) { vector
p; int t = 0; for (int i = 0; i < a.size(); i++) { t += a[i] * b; p.push_back(t % 10); t /= 10; } while (t) { p.push_back(t % 10); t /= 10; } return p;}int main() { int a, b; scanf("%d%d", &a, &b); prime(a); for (int i = 0; i < cnt; i++) { int p = pre[i]; rat[i] = rate(a, p) - rate(b, p) - rate(a - b, p); } vector
res; res.push_back(1); for (int i = 0; i < cnt; i++) { for (int j = 0; j < rat[i]; j++) res = Mul(res, pre[i]); } for (int i = res.size() - 1; ~i; i--) printf("%d", res[i]); printf("\n"); return 0;}

转载地址:http://gubtf.baihongyu.com/

你可能感兴趣的文章
python的ImportError
查看>>
linux下安装jenkins+git+python
查看>>
windows10家庭版开启组策略
查看>>
解决uiautomatorviewer中添加xpath的方法
查看>>
jenkins安装提示Please wait while Jenkins is getting ready to work...(Jenkins访问资源慢的问题)
查看>>
性能测试的必要性评估以及评估方法
查看>>
Spark学习——利用Mleap部署spark pipeline模型
查看>>
Oracle创建表,修改表(添加列、修改列、删除列、修改表的名称以及修改列名)
查看>>
使用redis实现订阅功能
查看>>
URL特殊字符转码
查看>>
对称加密整个过程
查看>>
java内存模型
查看>>
volatile关键字
查看>>
tomcat_关闭
查看>>
Servlet_快速入门
查看>>
Servlet_生命周期方法
查看>>
Servlet_体系结构
查看>>
Servlet_urlpartten配置
查看>>
Request_原理
查看>>
Request_继承体系
查看>>