Choose and Divide,Uva10375(数论之分解质因数)
来源:互联网 发布:淘宝自粘墙纸有甲醛吗 编辑:程序博客网 时间:2024/06/05 18:01
图片出自Uva截图。
题目大意:已知C( m,n ) = m!/( n!( m-n )! ) ,输入p,q,r,s( p>=q,r>=s,p,q,r,s<=10000 ),计算C( p,q )/C( r,s ).输出结果不超过 1e8 ,结果保留5位数。
解题思路:直接计算乘法结果太大,计算机不能存储,但是最终的结果是可以存储的。因此采用质因数分解法,将所有的要计算的数分解成素因数的形式,乘法即变成了素因数的幂的和。除法变成了素因数的幂的差。最后将所有的素因数全部相乘得到结果。
分解素因数的话,实现肯定是要打一张素数表的。不然怎么分解呢?使用Eratosthenes筛法产生素因数。分解一个数字则是依次试探能不能整除一个素数,能的话,这个素数就是这个数的素因数。可以整除几次,就是这个素因数的幂。
通过代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;typedef long long LL ;const LL MAXN = 10005;LL len;LL yuan[10005],sushu[10005];LL sushuji(){ LL p=0; for(LL i=2;i<=MAXN;i++) { if(yuan[i]==0) { sushu[p++] = i; for(LL j=i*i;j<=MAXN;j+=i) { if(yuan[j]==0) yuan[j] = 1; } } } return p;}LL fenzi[10000];void feijie( LL a ,LL d){ for(LL i=0;i<=len;i++) { while(a%sushu[i]==0) { fenzi[i]+=d; a/=sushu[i]; } if(a==1) break; }}void fun(LL n,LL d){ for(LL i=2;i<=n;i++) { feijie(i,d); }}int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); LL p,q,r,s; len = sushuji(); while(scanf("%lld%lld%lld%lld",&p,&q,&r,&s)==4) { memset(fenzi,0,sizeof(fenzi)); fun(p,1); fun(s,1); fun(r-s,1); fun(q,-1); fun(r,-1); fun(p-q,-1); double sum = 1; for(int i=0;i<len;i++) { sum*=pow(sushu[i],fenzi[i]); } printf("%.5lf\n",sum); } return 0;}
阅读全文
0 0
- Choose and Divide,Uva10375(数论之分解质因数)
- UVA10375 Choose and divide 质因数分解
- Uva10375 Choose and divide(数论、唯一分解定理、快速幂)
- uva10375 Choose and Divide(唯一分解定理)
- UVA10375 Choose and Divide (唯一分解定理)
- 【数论】Choose and Divide, UVa10375 【组合数学】【唯一分解定理】【精度】
- UVa10375 - Choose and divide
- uva10375 Choose and divide
- uva10375 Choose and divide 筛素数,唯一分解原理
- 唯一分解定理 (Choose and Divide Uva10375)
- uva10375(唯一分解定理) Choose and divide
- uva10375 - Choose and divide(选择与除法)
- UVA10375 Choose and divide 组合数
- UVA 10375 Choose and divide(数论)
- UVA - 10375Choose and divide(数论)
- POJ 2613 Choose and divide(数论)
- Choose and divide唯一分解定理/分解/直接 UVA
- 例题10-3 选择与除法(Choose and Divide,UVa10375)
- 针对Intellij IDEA 2017闪退的解决方案
- 微信分享没有缩略图
- jsonp使用
- file_get_contents,fopen,curl 获取远程页面
- 广播监听网络状态
- Choose and Divide,Uva10375(数论之分解质因数)
- 利用正则表达式判断是否为数字
- 微信小程序
- hive常见命令(持续更新)
- Android Studio 生成正式签名apk(app-release.apk)的两种方式
- 剑指offer——和为S的连续正数序列
- Leetcode add-two-numbers
- FFmpeg之ffplay命令使用
- PullToRefreshScrollView 嵌套gridview或listView,顶部布局顶上去的问题处理