poj3101--Astronomy(分数的最小公倍数)
题目链接: id=3101">点击打开链接
题目大意:有n个行星,给出每个行星的旋转的周期。问最少多少时间后n个行星会在一条直线上,初始点在一起,不存在全部的行星都有同一个周期
如果A行星的周期是t1。B行星的周期是t2(t2>t1),要在一条直线上,一定会执行的相差半个周期的倍数,时间(t/t2 - t/t1) % (1/2) = 0。也就是t*(t1-t2)/(t1*t2)%(1/2) = 0,要是时间最小。所以也就是差出一个半周期。也就是t = (t2-t1)/(t2*t1*2)这个t也就是A。B执行到一条直线上的最小时间,我们能够求出其它全部行星和A行星的在一条直线的最小时间,然后求出这个时间的最小公倍数。也就是整体的时间。
分数的最小公倍数 = (分子的最小公倍数)/(分母的最大公约数)
分数的最大公约数 = (分子的最大公约数)/ (分母的最小公倍数)
import java.util.*;
import java.math.* ;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in) ;
int n , i , cnt = 0 ;
int a[] = new int[1010];
int b[] = new int[1010] ;
BigInteger x , y , temp , u , v ;
n = cin.nextInt() ;
for(i = 0 ; i < n ; i++)
a[i] = cin.nextInt() ;
Arrays.sort(a,0,n) ;
b[cnt++] = a[0] ;
for(i = 1 ; i < n ; i++)
if( a[i] != b[cnt-1] )
b[cnt++] = a[i] ;
x = BigInteger.valueOf(b[1]*b[0]) ;
y = BigInteger.valueOf((b[1]-b[0])*2) ;
temp = x.gcd(y) ;
x = x.divide(temp) ;
y = y.divide(temp) ;
for(i = 2 ; i < cnt ; i++) {
u = BigInteger.valueOf(b[i]*b[0]) ;
v = BigInteger.valueOf((b[i]-b[0])*2) ;
temp = u.gcd(v) ;
u = u.divide(temp) ; v = v.divide(temp) ;
temp = x.gcd(u) ;
x = x.multiply(u).divide(temp) ;
y = y.gcd(v) ;
}
System.out.println(x + " " + y) ;
}
}
poj3101--Astronomy(分数的最小公倍数)的更多相关文章
- poj 3101 Astronomy(分数的最小公倍数)
http://poj.org/problem? id=3101 大致题意:求n个运动周期不全然同样的天体在一条直线上的周期. 这题我是看解题报告写的,没想到选用參照物,用到了物理中的角速度什么的. 由 ...
- poj 3101 Astronomy (java 分数的最小公倍数 gcd)
题目链接 要用大数,看了别人的博客,用java写的. 题意:求n个运动周期不完全相同的天体在一条直线上的周期. 分析:两个星球周期为a,b.则相差半周的长度为a*b/(2*abs(a-b)),对于n个 ...
- hdu 1713求分数的最小公倍数
题意中的圈数和天数说反了 #include<stdio.h> __int64 gcd(__int64 a,__int64 b) {/* 比如4/3 3/5 通分20/15 9/15 所以这 ...
- poj 3101Astronomy(圆周追击+分数最小公倍数)
/* 本题属于圆周追击问题: 假设已知两个圆周运动的物体的周期分别是a ,b, 设每隔时间t就会在同一条直线上 在同一条直线上的条件是 角度之差为 PI ! 那么就有方程 (2PI/a - 2PI/b ...
- poj 3101 Astronomy
2个星球周期为a,b.则相差半周的长度为a*b/(2*abs(a-b)),对于n个只需求这n个 分数的最小公倍数即可! 公式: 分数的最小公倍数 = 分子的最小公倍数/分母的最大公约数 由于涉及到大数 ...
- HDU 1713 相遇周期 (最小公倍数)
题意:... 析:求周期就是这两个分数的最小公倍数,可以先通分,再计算分子的最小倍数. 代码如下: #pragma comment(linker, "/STACK:1024000000,10 ...
- acm数学(转)
这个东西先放在这吧.做过的以后会用#号标示出来 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合数学>,那本书的这一章写的很详细也很容易理解.最好能 ...
- [转] POJ数学问题
转自:http://blog.sina.com.cn/s/blog_6635898a0100magq.html 1.burnside定理,polya计数法 这个大家可以看brudildi的<组合 ...
- ACM数学
1.burnside定理,polya计数法 这个专题我单独写了个小结,大家可以简单参考一下:polya 计数法,burnside定理小结 2.置换,置换的运算 置换的概念还是比较好理解的,< ...
随机推荐
- Advanced Fruits HDU杭电1503【LCS的保存】
Problem Description The company "21st Century Fruits" has specialized in creating new sort ...
- android 九宫格(16宫格)控件
public class NineRectView extends ViewGroup { private Context ctx; private int wSize,hSize,row,colum ...
- (十进制高速幂+矩阵优化)BZOJ 3240 3240: [Noi2013]矩阵游戏
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3240 3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec M ...
- Linux Mint (应用软件— 虚拟机:Virtualbox续)
我已经在当前的电脑中安装好了虚拟机.并且在虚拟机中安装了Ubuntu14.04LTS系统.接下来能够開始自己的折腾之旅了. 開始使用的时候总是感觉显示有问题,根据经验来看同,是系统分辨率设置不当引起的 ...
- Oracle多表连接效率,性能优化
Oracle多表连接,提高效率,性能优化 (转) 执行路径:ORACLE的这个功能大大地提高了SQL的执行性能并节省了内存的使用:我们发现,单表数据的统计比多表统计的速度完全是两个概念.单表统计可能只 ...
- Spark Streaming概念学习系列之Spark Streaming的竞争对手
不多说,直接上干货! Spark Streaming的竞争对手 Storm 在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology).这个拓扑将会被提交给集群,由集群中的 ...
- C# 异步编程学习(一)
异步 编程 可在 等待 某个 任务 完成时, 避免 线程 的 占用, 但要 想 正确地 实现 编程, 仍然 十分 伤脑筋. . NET Framework 中, 有三种 不同 的 模型 来 简化 异步 ...
- Tomcat配置自签名https
从JDK中找到keytool.exe,随便复制到一个方便的目录,在命令行中进入这个目录. 第一步:为服务器生成证书 tomcat.keystore,命令中如果是IP方式访问用-ext SAN=ip:1 ...
- c# ExecuteScalar()
ExecuteScalar这个方法是从数据库中检索单个值返回值是object类型,必须用与它在数据库里存放的类型相同类型或者可以转换成的类型,比如数据是nchar类型值为 "123" ...
- vim常用的基本命令
vim 常用的基本命令1. w [文件名] 相当于另存为2. r [文件名] 将[文件名]的内容加到光标行后面3. n1,n2 w[filename] 将n1到n2的内容保存为[file ...