POJ2103 Jackpot
Description
The Great Dodgers company has recently developed a brand-new playing machine.
You put a coin into the machine and pull the handle. After that it chooses some integer number. If the chosen number is zero you win a jackpot. In the other case the machine tries to divide the chosen number by the lucky numbers \(p_1 , p_2 , \cdots , p_n\) . If at least one of the remainders is zero --- you win.
Great Dodgers want to calculate the probability of winning on their machine. They tried to do it, but failed. So Great Dodgers hired you to write a program that calculates the corresponding probability.
Unfortunately, probability theory does not allow you to assume that all integer numbers have equal probability. But one mathematician hinted you that the required probability can be approximated as the following limit:
\]
Here \(S_k\) is the number of integers between \(-k\) and \(k\) that are divisible by at least one of the lucky numbers.
Input
Input file contains \(n\) --- the number of lucky numbers \((1 \le n \le 16)\), followed by \(n\) lucky numbers \((1 \le p_i \le 10^9)\).
Output
It is clear that the requested probability is rational. Output it as an irreducible fraction.
On the first line of the output file print the numerator of the winning probability. On the second line print its denominator. Both numerator and denominator must be printed without leading zeroes. Remember that the fraction must be irreducible.
Sample Input
2
4 6
Sample Output
1
3
第一次用java写程序,为了不打高精度(因为必须涉及高精除),代码几乎是蒯的。\(2^N\)枚举,相互求\(lcm\),贡献即为\(\frac{1}{lcm}\),然后用容斥原理合答案即可。
ACMjava1H速成戳这里。
import java.math.*;
import java.util.*;
public class Main
{
static BigInteger d,ret,temp,yy;
static int n,dd;
static boolean mark = true;
static BigInteger[] a = new BigInteger[20];
public static void main(String[] args)
{
Scanner in = new Scanner (System.in);
n = in.nextInt();
temp = BigInteger.ONE;
ret = BigInteger.ZERO;
for (int i = 0;i < n;++i)
{
int k = in.nextInt();
a[i] = BigInteger.valueOf(k);
d = temp.gcd(a[i]);
temp = temp.multiply(a[i]).divide(d);
}
for (int i = 1;i < (1<<n);++i)
{
mark = false; yy = BigInteger.ONE;
for (int j = 0;j < n;++j) if (((1 << j) & i) > 0) { mark = !mark; d = a[j].gcd(yy); yy = yy.multiply(a[j]).divide(d); }
if (mark) ret = ret.add(temp.divide(yy));
else ret = ret.subtract(temp.divide(yy));
}
d = ret.gcd(temp);
System.out.println(ret.divide(d));
System.out.println(temp.divide(d));
}
}
POJ2103 Jackpot的更多相关文章
- UVa 10684 - The jackpot
题目大意:给一个序列,求最大连续和. 用sum[i]表示前i个元素之和,那么以第i个元素结尾的最大连续和就是sum[i]-sum[j] (j<i)的最大值,也就是找前i-1个位置sum[]的最小 ...
- 【2005-2006 ACM-ICPC, NEERC, Moscow Subregional Contest】Problem J. Jack-pot
简单dfs,差分一下A数组和建出字典树能写得更方便,若不这么做代码时就会像我一样难受. #include<cstdio> #include<cstring> #include& ...
- Web测试的常用测试用例与知识
1. Web测试中关于登录的测试 2. 搜索功能测试用例设计 3. 翻页功能测试用例 4. 输入框的测试 5. Web测试的常用的检查点 6. 用户及权限管理功能常规测试方法 7. Web测试之兼容性 ...
- web测试常用的用例及知识
1. Web测试中关于登录的测试... 1 2. 搜索功能测试用例设计... 2 3. 翻页功能测试用例... 3 4. 输入框的测试... 5 5. ...
- An Introduction to Interactive Programming in Python (Part 1) -- Week 2_1 练习
# Practice Exercises for Functions # Solve each of the practice exercises below. # 1.Write a Python ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)C. Bear and Poker
C. Bear and Poker ...
- iOS开发之 几本书
<object_c 编程之道书> <iOS 7 UI Transition Guide> iOS开发指南:从零基础到App Store上架[国内第一本iOS架构设计图书,涵盖i ...
- C Primer Plus(第五版)7
第 7 章 C 控制语句:分支和跳转 在本章中你将学习下列内容: · 关键字:if(如果),else(否则),switch(切换),continue(继续),break(中断), case(情况),d ...
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) A. Bear and Poker 分解
A. Bear and Poker Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/573/pro ...
随机推荐
- Android学习之Intent传递数据
Intent在Activity中的作用主要是有两个: 1.启动目标Activity 2.传递数据 Intent在传递数据时分两种情况:向下一个Activity传递数据和从下一个Activity返回数据 ...
- 百度编辑器umeditor使用总结
百度编辑器是一个功能很全.很强大. 百度单张图片上传只能存储在项目下面,而不能独立自定义存储位置,因此重写上传代码 百度文章中的图片是通过base64实现的,直接存储在数据库中 tomcat通过虚拟路 ...
- 获取select下拉列表选中的值
html: <select id="resultList"> <option >1班</option> <option >2班< ...
- js 如何创建一个对象
有两种简单方法可以创建一个空对象: var obj = new Object(); 和: var obj = {}; 这两种方法在语义上是相同的.第二种更方便的方法叫作“对象字面量(object li ...
- C# Callback 回调实用讲解 [原创]
这个是2011年写的一个技术贴,现在看可能有点过时了,有兴趣的朋友也可以看一下. 一. 描述 在开发winform程序时不会考虑页面刷新问题,只要控制好线程别导致假死就ok了,但是在开发web页面程序 ...
- sql server 的JDBC 配置
1.java中使用数据库需要用JDBC(java database connection)来连接和操作 下载地址:http://www.microsoft.com/en-us/download/det ...
- Ubuntu12.04 下安装Qt
1.下载Qt Creator 链接 http://qt-project.org/downloads 选择 Qt Creator 2.8.0 for Linux/X11 32-bit (61 MB) ...
- 学习笔记7_Java_day11_JSP原理(5)
4. jsp原理(理解) * jsp其实是一种特殊的Servlet > 当jsp页面第一次被访问时,服务器会把jsp编译成java文件(这个java其实是一个servlet类) > 然后再 ...
- Haproxy配置参数
HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置. ===================== global 参数是进程级的,通常和操作系统(OS)相关. ...
- mysql数据库文件默认保存目录(windows)
如果没有自己去设置安装路径,MYSQL默认安装在C:/Program Files/MySQL/MySQL Server 5.1,新建的数据库文件在C:/Documents and Settings/A ...