uva 10375 唯一分解定理
来源:互联网 发布:马哲外设淘宝店 编辑:程序博客网 时间:2024/06/05 16:04
题意:
已知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)。输出保证不超过10^8,保留5位小数
解法1:
根据唯一分解定理,N!可以分解为若干个质数相乘。
模拟分解这个式子
代码:
#include <bits/stdc++.h>using namespace std;#define maxn 10000+10int vis[maxn];int e[maxn];vector<int>primes;void init()//计算10000以内的素数{ int m = sqrt(maxn + 0.5); for (int i = 2; i <= m; i++) if (!vis[i]) for (int j = i*i; j <= 10000; j += i) vis[j] = 1; for (int i = 2; i <= 10000; i++) if (!vis[i]) primes.push_back(i);}int p,q,r,s;void add_integer(int n,int d){ for(int i=0;i<primes.size();i++) { while(n%primes[i]==0) { n/=primes[i]; e[i]+=d; } if(n==1) break; }}void add_factorial(int n,int d){ for(int i=1;i<=n;i++) add_integer(i,d);}int main(){ init(); while(cin>>p>>q>>r>>s) { memset(e,0,sizeof(e)); add_factorial(p,1); add_factorial(q,-1); add_factorial(p-q,-1); add_factorial(r,-1); add_factorial(s,1); add_factorial(r-s,1); double ans=1; for(int i=0;i<primes.size();i++) { if(e[i]!=0) ans*=pow(primes[i],e[i]); } printf("%.5lf\n",ans); } return 0;}
解法2:
用组合公式,一边乘一边除即可,注意C(10,4)==C(10,6),这种类似情况我们求C(10,4)即可。
代码:
#include <bits/stdc++.h>using namespace std;int main(){ int p,q,r,s; double ans; int t; while(cin>>p>>q>>r>>s) { ans=1; q=min(q,p-q);s=min(s,r-s); t=max(q,s); for(int i=1;i<=t;i++) { if(i<=q) {ans*=double(p-i+1)/double(i);} if(i<=s) {ans/=double(r-i+1)/double(i);} } printf("%.5lf\n",ans); } return 0;}
阅读全文
0 0
- uva 10375 唯一分解定理
- UVA 10375 唯一分解定理
- UVa 10375 唯一分解定理
- uva 10375 唯一分解定理
- uva 1635 唯一分解定理
- UVa 10791 唯一分解定理
- uva 10375 唯一分解定理 筛法求素数【数论】
- uva 10375 (唯一分解定理+筛素数)
- UVA 10375 Choose and divide(唯一分解定理)
- UVA 10375 - Choose and divide【唯一分解定理】
- Uva 10375 Choose and divide 素数唯一分解定理
- UVA - 10375 Choose and divide (唯一分解定理)
- UVA 10375 Choose and divide(唯一分解定理)
- UVA 10375 Choose and divide (唯一分解定理)
- UVA.10375 Choose and divide (唯一分解定理)
- UVa-10375 Choose and divide 【唯一分解定理】
- UVA 1635 Irrelevant Elements [唯一分解定理]
- Choose and divide唯一分解定理/分解/直接 UVA
- SVN的主干(trunk)、分支(branch)和标记(tag)
- presto对orc文件的读取
- 40. Combination Sum II
- GET方法传参解决中文乱码
- [软件测试]
- uva 10375 唯一分解定理
- 【Reverse Integer】 --MyLeetCode(三)
- Linux时间子系统(一) -- 原理
- 【拜小白opencv】14-只去除RGB的某一颜色通道
- SublimeClang
- 洛谷
- 快速排序实现
- 主索引和二级索引区别,并创建一个二级索引
- SpringMVC详解(一)------入门实例