链接:

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. OutSystems学习笔记。

    ew job and new software, new challenge as well. OutSystems这软件挺好上手的.虽然没有中文文档,但英文文档超级详细,堪称傻瓜版SOP 照着步骤写 ...

  2. Mysql插入Emoji表情出错

    Caused by: java.sql.SQLException: Incorrect at com.mysql.jdbc.SQLError.createSQLException(SQLError.j ...

  3. golang学习之文件上传

    首先是上传页面upload.html: <!doctype html> <html> <head> <meta charset="utf-8&quo ...

  4. [javaSE] java上传图片给PHP

    java通过http协议上传图片给php文件,对安卓上传图片给php接口的理解 java文件: import java.io.DataOutputStream; import java.io.File ...

  5. IntelliJ IDEA 快捷键(二)(window版)

    一.重构 1.重构变量 修改变量名称,即重命名.快捷键 Shift + F6 ,位于 Refactor 中. 2.重构方法 可以增加变量个数.快捷键 Ctrl + F6 ,位于 Refactor 中. ...

  6. LinearLayout中的android:layout_garvity的center_vertical和center_horizontal

    当LinearLayout的排列方向是 horizontal时,只有垂直方向上的对齐方式才会生效.因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对 ...

  7. axios拦截器请求头携带token

    转—— https://github.com/superman66/vue-axios-github/blob/master/src/http.js

  8. pv-date-handle

    pv-date-handle 这是一个时间格式化转换的小工具,简单易用 ## 快速开始 安装`npm install pv-date-handle -S` ```js import formateDa ...

  9. 如何删除EF4.0以上的版本

    通过VS2010的Package Manager Console安装的EF版本,会在项目根目录的packages目录中生成一个EntityFramework.4.3.0目录,安装什么版本就是什么版本的 ...

  10. webgis开发-开始向JS转向

    官方的一个blog Final Release and Support Plan for the ArcGIS APIs / Viewers for Flex and Silverlight 网址: ...