Choose and divide UVA - 10375
2018-02-26 08:06
239 查看
题目链接:Choose and divide UVA - 10375
唯一分解定理。。。。。。
唯一分解定理。。。。。。
#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #include 4000 <stack> #include<map> #include<iomanip> #define ll long long using namespace std; const int maxn = 1e4+7; int p,q,r,s,e[maxn]; bool isp[maxn]; vector<int> primes; void prim() { int m = sqrt(maxn + 0.5); memset(isp,0,sizeof(isp)); for(int i = 2; i <= m; i++) if(!isp[i]) for(int j = i*i; j <= m; j+=i) isp[j] = true; for(int i = 2; i <= maxn; i++) if(!isp[i]) primes.push_back(i); } 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() { prim(); while(scanf("%d%d%d%d",&p,&q,&r,&s) != EOF) { 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++) { ans *= pow(primes[i], e[i]); } printf("%.5lf\n", ans); } return 0; }
相关文章推荐
- UVA 10375 Choose and divide(组合数运算)
- UVa 10375 Choose and divide
- UVA 10375 Choose and divide (唯一分解定理)
- UVA - 10375 Choose and divide
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- Choose and divide UVA - 10375
- UVA 10375 Choose and divide 唯一分解定理
- UVA 10375 Choose and divide
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- UVa 10375 Choose and divide
- UVA - 10375 Choose and divide
- UVA 10375 - Choose and divide【唯一分解定理】
- UVa10375 - Choose and divide
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- UVA 10375 Choose and divide(大数的表示)
- Uva 10375 Choose and divide 素数唯一分解定理
- UVa 10375 - Choose and divide
- UVA 10375 Choose and divide
- Choose and divide唯一分解定理/分解/直接 UVA - 10375
- Choose and divide UVA - 10375