UVa 10375 - Choose and divide(唯一分解定理)
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1316
题意:
已知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位小数。
分析:
首先,求出10000以内的所有素数prime,然后用数组e表示当前结果的唯一分解式中各个素数的指数。
例如,e={1,0,2,0,0,0,…}表示21*52=50。具体实现见代码。
代码:
1 import java.io.*; 2 import java.util.*; 3 4 public class Main { 5 static int e[]; 6 static ArrayList<Integer> prime = new ArrayList<Integer>(); 7 8 static void getPrimeNumber(int up) { // 获取素数 9 boolean isp[] = new boolean[up+5]; 10 Arrays.fill(isp, true); 11 int u = (int)Math.sqrt(up + 0.5); 12 for(int t = 2; t <= u; t++) if(isp[t]) { 13 for(int i = t * t; i <= up; i += t) isp[i] = false; 14 } 15 for(int i = 2; i <= up; i++) if(isp[i]) prime.add(i); 16 } 17 18 static void addInteger(int n, int d) { // 乘以或除以n. d=1表示乘,d=-1表示除 19 for(int i = 0; i < prime.size(); i++) { 20 while(n % prime.get(i) == 0) { 21 n /= prime.get(i); 22 e[i] += d; 23 } 24 if(n == 1) break; 25 } 26 } 27 28 static void addFactorial(int n, int d) { // 把结果乘以(n!)的d次方 29 for(int i = 1; i <= n; i++) addInteger(i, d); 30 } 31 32 public static void main(String args[]) { 33 Scanner cin = new Scanner(new BufferedInputStream(System.in)); 34 getPrimeNumber(10000); 35 e = new int[prime.size()]; 36 37 while(cin.hasNext()) { 38 int p = cin.nextInt(); 39 int q = cin.nextInt(); 40 int r = cin.nextInt(); 41 int s = cin.nextInt(); 42 43 Arrays.fill(e, 0); 44 addFactorial(p, 1); 45 addFactorial(q, -1); 46 addFactorial(p-q, -1); 47 addFactorial(r, -1); 48 addFactorial(s, 1); 49 addFactorial(r-s, 1); 50 double ans = 1; 51 for(int i = 0; i < prime.size(); i++) 52 ans *= Math.pow(prime.get(i), e[i]); 53 System.out.printf("%.5f\n", ans); 54 } 55 cin.close(); 56 } 57 }
转载于:https://www.cnblogs.com/hkxy125/p/8855457.html
UVa 10375 - Choose and divide(唯一分解定理)相关推荐
- UVa 10375 Choose and divide
题目大意:给出p,q,s和r, 计算C(p, q) / C(s, r), 公式题目已经给出. 解题思路:以为C(p,q) = C(p,p - q), 所以要尽量选择计算量交少的,边乘边除. #incl ...
- Choose and divide(唯一分解定理)
首先说一下什么是唯一分解定理 唯一分解定理:任何一个大于1的自然数N,如果N不是质数,那么N可以分解成有限个素数的乘积:例:N=(p1^a1)*(p2^a2)*(p3^a3)......其中p1< ...
- 欧几里得算法与唯一分解定理
整理的算法模板合集: ACM模板 目录 最大公约数与最大公倍数 唯一分解定理 快速分解质因子 最大公约数与最大公倍数 最多O(logn)O(logn)O(logn) int gcd(int a, in ...
- UVa10375 Choose and divide
http://vjudge.net/problem/UVA-10375 组合数除以组合数-- 用唯一分解定理将每个乘数和除数分解质因数,统计每个质因数的使用次数(乘一次+1,除一次-1),所有数分解完 ...
- FZU 1075 分解素因子【数论/唯一分解定理/分解素因子裸模板】
[唯一分解定理]:https://www.cnblogs.com/mjtcn/p/6743624.html 假设x是一个正整数,它的值不超过65535(即1<x<=65535),请编写一个 ...
- 唯一分解定理(算术基本定理)详解——hdu5248和lightoj1341
算数分解定理(唯一分解定理): 定义: 任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积 N=P1a1 P2a2P3a3-Pnan,这里P1<P2<P3-& ...
- Gym-101466K Random Numbers(线段树,数学,唯一分解定理)
给一棵树,树上每个节点有一个权值,有两个操作,RAND操作查询u的子树乘积是多少以及有多少因数,SEED操作把节点u乘上v n,q <= 1e5.数值小于等于1e9,最大的质因数不超过13 组队 ...
- LightOJ - 1236 (唯一分解定理)
题意:求有多少对数对(i,j)满足lcm(i,j) = n,1<=i<=j, 1<=n<=1e14. 分析:根据整数的唯一分解定理,n可以分解为(p1^e1)*(p2^e2)* ...
- 牛客 - 阶乘(唯一分解定理)
题目链接:点击查看 题目大意:给出一个 p ,求出最小的 n! 使得 p 可以整除 n! 题目分析:因为 p 高达 1e9 ,可以考虑sqrt(n)的算法,也就是唯一分解定理了,分解之后对于每个质因子 ...
最新文章
- [mvc] 简单的forms认证
- JavaScript权威指南 - 函数
- 十年前,他如何自学技术进阿里?
- Outlier Detection for Improved Data Quality and Diversity in Dialog Systems-学习笔记
- win主机ping不通linux的IP
- Centos Docker 安装 Redis 并测试使用记录
- CentOS 7/RHEL 7忘记root密码最简单的修改方法
- 哈利波特:哈迷们集合啦
- vi毕业设计参考文献优秀范例
- VR眼镜连接android设备,VR眼镜怎么连接手机 VR眼镜使用教程
- linux mkv转mp4,Linux DVD 转 MP4 – HandBrake – Copy a DVD to MP4 or MKV file
- java:/comp/env_启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not found这个日志...
- 项目经理的工作就是胡搅蛮缠满地打滚
- (信贷风控十五)评分卡分数切分、授信额度与利率定价
- 两种降维方法的总结——LLE(局部线性嵌入),ISOMAP(等度量映射)
- OpenCV——二值图像连通域分析
- 《算竞(紫书)》笔记1 STL入门
- 从键盘上输入长方形的长和宽,求长方形的周长和面积。
- Facebook登录-前端网页以及在angular中的使用方法
- linux云计算主要就业岗位有哪些