链接:

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。具体实现见代码。

代码:

 import java.io.*;
import java.util.*; public class Main {
static int e[];
static ArrayList<Integer> prime = new ArrayList<Integer>(); static void getPrimeNumber(int up) { // 获取素数
boolean isp[] = new boolean[up+5];
Arrays.fill(isp, true);
int u = (int)Math.sqrt(up + 0.5);
for(int t = 2; t <= u; t++) if(isp[t]) {
for(int i = t * t; i <= up; i += t) isp[i] = false;
}
for(int i = 2; i <= up; i++) if(isp[i]) prime.add(i);
} static void addInteger(int n, int d) { // 乘以或除以n. d=1表示乘,d=-1表示除
for(int i = 0; i < prime.size(); i++) {
while(n % prime.get(i) == 0) {
n /= prime.get(i);
e[i] += d;
}
if(n == 1) break;
}
} static void addFactorial(int n, int d) { // 把结果乘以(n!)的d次方
for(int i = 1; i <= n; i++) addInteger(i, d);
} public static void main(String args[]) {
Scanner cin = new Scanner(new BufferedInputStream(System.in));
getPrimeNumber(10000);
e = new int[prime.size()]; while(cin.hasNext()) {
int p = cin.nextInt();
int q = cin.nextInt();
int r = cin.nextInt();
int s = cin.nextInt(); Arrays.fill(e, 0);
addFactorial(p, 1);
addFactorial(q, -1);
addFactorial(p-q, -1);
addFactorial(r, -1);
addFactorial(s, 1);
addFactorial(r-s, 1);
double ans = 1;
for(int i = 0; i < prime.size(); i++)
ans *= Math.pow(prime.get(i), e[i]);
System.out.printf("%.5f\n", ans);
}
cin.close();
}
}

UVa 10375 - Choose and divide(唯一分解定理)的更多相关文章

  1. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  2. 【暑假】[数学]UVa 10375 Choose and divide

    UVa 10375 Choose and divide 题目: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19601 思路 ...

  3. uva10375 Choose and Divide(唯一分解定理)

    uva10375 Choose and Divide(唯一分解定理) 题意: 已知C(m,n)=m! / (n!*(m-n!)),输入整数p,q,r,s(p>=q,r>=s,p,q,r,s ...

  4. UVA 10375 Choose and divide【唯一分解定理】

    题意:求C(p,q)/C(r,s),4个数均小于10000,答案不大于10^8 思路:根据答案的范围猜测,不需要使用高精度.根据唯一分解定理,每一个数都可以分解成若干素数相乘.先求出10000以内的所 ...

  5. UVA 10375 Choose and divide(大数的表示)

    紫上给得比较奇怪,其实没有必要用唯一分解定理.我觉得这道题用唯一分解只是为了表示大数. 但是分解得到的幂,累乘的时候如果顺序很奇怪也可能溢出.其实直接边乘边除就好了.因为答案保证不会溢出, 设定一个精 ...

  6. UVA 10375 Choose and divide

    n! 分解素因子 快速幂 ei=[N/pi^1]+ [N/pi^2]+ …… + [N/pi^n]  其中[]为取整 ei 为数 N!中pi 因子的个数: #include <iostream& ...

  7. Uva 10375 选择与除法 唯一分解定理

    题目链接:https://vjudge.net/contest/156903#problem/E 题意:已知 求:C(p,q)/C(r,s) 其中p,q,r,s都是10^4,硬算是肯定超数据类型的. ...

  8. UVA.10791 Minimum Sum LCM (唯一分解定理)

    UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...

  9. Choose and divide(唯一分解定理)

    首先说一下什么是唯一分解定理 唯一分解定理:任何一个大于1的自然数N,如果N不是质数,那么N可以分解成有限个素数的乘积:例:N=(p1^a1)*(p2^a2)*(p3^a3)......其中p1< ...

随机推荐

  1. VMWARE 12安装Tools

    准备条件 1.yum install perl 2.yum install gcc 接着就是挂载安装 新建cdrom挂载目录mkdir /mnt/cdrom挂载光驱mount -t auto /dev ...

  2. MongoDB 学习(三)MongoDB 和 Spring 整合(Maven)

    一.MongoDB 和 Spring 整合(Maven) 1.相关 jar 包准备 2.用 Maven 创建项目,pom.xml 文件 <project xmlns="http://m ...

  3. 流畅的python和cookbook学习笔记(四)

    1.数字的四舍五入 对于简单的舍入运算,使用内置的 round(value, ndigits) 函数即可. round 函数返回离它最近的偶数.也就是说,对 1.5 或者 2.5 的舍入运算都会得到 ...

  4. untiy3d小工具——修改scene与prefab中的sprite

    坑1:因为替换图片要获取所有包含image的组件,开始我使用的是gameobject.getComponents<Image>()和FindObjectsOfType<Image&g ...

  5. ApplicationHost.config文件被破坏导致IIS崩溃

    “”Application Host Helper Service 在尝试删除历史目录“C:\inetpub\history\CFGHISTORY_0000000475”时遇到错误.将跳过并忽略此目录 ...

  6. Docker问题集合

    1. 安装后启动出现 解决办法: 删除以下文件夹重新启动docker服务即可: 可能原因:(1) 之前docker进程出现错误并保存在keys.json文件中 (2) 删除之前配置了阿里云镜像,生成了 ...

  7. 关于css伪类,伪元素详解总结

    伪类 伪类就是一种虚构的状态或者说是一个具有特殊属性的元素可以使用CSS进行样式修饰.常见的几种伪类是: :link , :visited , :hover , :active , :first-ch ...

  8. 爬取地图列表并下载-node.js

    var fs = require('fs'); var request = require('request'); var cheerio = require('cheerio'); var url ...

  9. Ant design 项目打包后报错:"Menu(or Flex) is not defined"

    我的项目使用了ant-design 和 ant-design-mobile,在测试环境上没问题,但是打包发布之后控制台报错 Menu is not defined Flex is not define ...

  10. html高度塌陷问题解决

    高度塌陷的问题: 当开启元素的BFC以后,元素将会有如下的特性 1 父元素的垂直外边距不会和子元素重叠    开启BFC的元素不会被浮动元素所覆盖    开启BFC的元素可以包含浮动的子元素 如何开启 ...