poj 3101 Astronomy (java 分数的最小公倍数 gcd)
生活随笔
收集整理的這篇文章主要介紹了
poj 3101 Astronomy (java 分数的最小公倍数 gcd)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
要用大數,看了別人的博客,用java寫的。
題意:求n個運動周期不完全相同的天體在一條直線上的周期。
分析:兩個星球周期為a,b。則相差半周的長度為a*b/(2*abs(a-b)),對于n個只需求這n個
分數的最小公倍數即可。 分數的最小公倍數 = 分子的最小公倍數/分母的最大公約數 1 import java.util.*; 2 import java.math.*; 3 public class Main { 4 public static int [] t = new int [1200]; 5 public static int [] tt = new int [1200]; 6 public static BigInteger [] fz = new BigInteger [1200]; 7 public static BigInteger [] fm = new BigInteger [1200]; 8 9 public static int gcd(int a, int b){ 10 return b==0?a:gcd(b, a%b); 11 } 12 public static void main(String args[]){ 13 int n, m; 14 Scanner cin=new Scanner(System.in); 15 n = cin.nextInt(); 16 for(int i = 0; i < n; i++) 17 t[i] = cin.nextInt(); 18 Arrays.sort(t, 0, n); //對數組排序 19 m = 0; 20 tt[m++] = t[0]; 21 for(int i = 1; i < n; i++) 22 if(t[i]!=t[i-1]) 23 tt[m++] = t[i]; 24 for(int i = 1; i < m; i++){ 25 int a = tt[i]*t[0]; 26 int b = 2*(tt[i]-tt[0]); 27 int g = gcd(a, b); 28 fz[i] = BigInteger.valueOf(a/g); 29 fm[i] = BigInteger.valueOf(b/g); 30 } 31 BigInteger t1, t2; 32 t1 = fz[1]; t2 = fm[1]; 33 for(int i = 2; i < m; i++) 34 { 35 BigInteger aa = t1.multiply(fz[i]); 36 BigInteger gg = t1.gcd(fz[i]); 37 t1 = aa.divide(gg); 38 t2 = t2.gcd(fm[i]); 39 } 40 System.out.println(t1+" "+t2); 41 } 42 }轉載于:https://www.cnblogs.com/bfshm/p/3860044.html
總結
以上是生活随笔為你收集整理的poj 3101 Astronomy (java 分数的最小公倍数 gcd)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: This 在 C# 中的含义
- 下一篇: joa-framework 工作流高速开