poj 3101Astronomy(圓周追擊+分數最小公倍數)

  1 /*
  2    本題屬于圓周追擊問題:
  3      假設已知兩個圓周運動的物體的周期分別是a ,b, 設每隔時間t就會在同一條直線上 
  4      在同一條直線上的條件是 角度之差為 PI !
  5      那么就有方程 (2PI/a - 2PI/b)* t=PI  所以就有 t=ab/(2|a-b|);
  6      如果有多個物體, 就會有多個t值,所以每隔 所有 t值的最小公倍數的時間所有的物體就會在同一直線上!
  7      
  8      另外:如果分數的分子分別是 a1, a2, ...., 和 b1, b2, ....
  9      那么所有分數的最小公倍數就是lcm(a1, a2, ...)/gcd(b1, b2,....);
 10      
 11      再有:如何求多個數的最小公倍數呢?
 12      根據數論,每一個數都可以表示成素數的乘積的形式! 
 13      令p[i]存儲素數,將a1,a2,...分別整除以p[i],直到除盡!并記錄除以每個p[i]時的個數temp;
 14      并更新該個數的最大值cnt[i]=max(temp, cnt[i]); 
 15      
 16      最后cnt[i]個p[i]分別相乘得到最終的結果就是所有數的最小公倍數! 
 17 */
 18 #include<iostream>
 19 #include<cstring>
 20 #include<cmath>
 21 #include<cstdio>
 22 #define M 10005
 23 #define N 1005
 24 using namespace std;
 25 typedef long long LL;
 26 LL p[M];
 27 bool isP[M];
 28 LL cnt[M];
 29 LL q[N];
 30 LL ans[N], endx;
 31 LL top;
 32 
 33 void bigN(){//大數據的處理
 34    LL c=0;
 35    endx=0;
 36    ans[0]=1;
 37    for(LL i=0; i<top; ++i)
 38       for(LL j=0; j<cnt[i]; ++j){
 39           for(LL k=0; k<=endx; ++k){
 40              ans[k]=ans[k]*p[i] + c;
 41              c=ans[k]/10000;
 42              ans[k]%=10000;
 43           }
 44           if(c>0){
 45              ans[++endx]=c;
 46              c=0;
 47           }
 48       }
 49 }
 50 
 51 void isPrime(){
 52    LL i, j;
 53    isP[1]=1;
 54    for(i=2; i<M; ++i){
 55        if(!isP[i])  p[top++]=i;
 56        for(j=0; j<top && i*p[j]<M; ++j){
 57            isP[i*p[j]]=1;
 58            if(i%p[j]==0) break;
 59        }
 60    }
 61 }
 62 
 63 void solve(LL k){
 64    for(LL i=0; i<top && p[i]<=k; ++i){
 65        LL tmp=0;
 66        while(k%p[i]==0){
 67           ++tmp;
 68           k/=p[i];
 69        }
 70        
 71        if(tmp>cnt[i])
 72           cnt[i]=tmp;
 73    }
 74 }
 75 
 76 LL gcd(LL a, LL b){
 77    while(b){
 78       LL r=a%b;
 79       a=b;
 80       b=r;
 81    }
 82    return a;
 83 }
 84 
 85 int main(){
 86    LL n;
 87    isPrime();
 88    while(scanf("%lld", &n)!=EOF){
 89           memset(cnt, 0, sizeof(cnt));
 90           scanf("%lld", &q[0]); 
 91        for(LL i=1; i<n; ++i){
 92            scanf("%lld", &q[i]);
 93            LL tmp=q[0]-q[i]>0 ? q[0]-q[i] : q[i]-q[0];
 94            if(tmp!=0){
 95               LL GCD=gcd(tmp, q[0]*q[i]);
 96               solve(q[0]*q[i]/GCD);
 97               q[i]=tmp/GCD;
 98            }
 99            else q[i]=0;
100        } 
101        
102        LL ans2=0;
103        for(LL i=1; i<n; ++i)
104           ans2=gcd(ans2, q[i]);
105        if(cnt[0]>0)//除以2 
106            --cnt[0];
107        else ans2*=2; 
108      
109        bigN();
110        if(ans2==0){
111            endx=0;
112            ans[endx]=0;
113        }
114        printf("%lld", ans[endx]);
115        for(int i=endx-1; i>=0; --i)
116           printf("%04lld", ans[i]);
117        printf(" %lld\n", ans2);
118    }
119    return 0;
120 } 

 1 //用java爽一下,處理大數
 2 import java.util.Scanner;
 3 import java.util.Arrays;
 4 import java.math.*;
 5 import java.io.BufferedInputStream;
 6 class Main{
 7    static int[] tt = new int[1005];
 8    static int n;
 9    static int top=0;
10    static boolean[] flag = new boolean[10005];
11    static int[] p = new int[10005];
12    static int[] q = new int[10005];
13    static int[] aa = new int[10005];
14    public static void isprime(){
15        int i, j;
16        Arrays.fill(flag, false);
17        for(i=2; i<=10000; ++i){
18            if(!flag[i]) p[top++]=i;
19            for(j=0; j<top && i*p[j]<=10000; ++j){
20               flag[i*p[j]]=true;
21               if(i%p[j]==0) break;
22            }     
23        }
24        --top;
25        flag[1]=true;
26    }
27    public static void solve(int k){
28         int i, cnt;
29         for(i=0; i<=top && p[i]<=k; ++i){
30            cnt=0;
31            while(k%p[i]==0){
32                 ++cnt;
33                 k=k/p[i];
34              }
35            if(cnt>aa[i])
36               aa[i]=cnt;
37         }
38    }
39 
40    public static int gcd(int a, int b){
41        while(b!=0){
42           int r=a%b;
43           a=b;
44           b=r;
45        }
46        return a;
47    }
48    
49    
50    public static  void main(String[] args){
51        isprime();
52        Scanner input = new Scanner(new BufferedInputStream(System.in));
53        n=input.nextInt();
54        q[0]=input.nextInt();
55        for(int i=1; i<n; ++i){
56            q[i]=input.nextInt();
57            int temp=Math.abs(q[0]-q[i]);
58            if(temp!=0){
59               int GCD=gcd(temp, q[0]*q[i]);
60               solve(q[0]*q[i]/GCD);
61               q[i]=temp/GCD;
62            }
63            else q[i]=0;
64        }
65        
66        BigInteger bigN = BigInteger.ONE;
67        for(int i=0; i<=top; ++i){
68            for(int j=0; j<aa[i]; ++j)
69               bigN=bigN.multiply(BigInteger.valueOf(p[i]));
70        }
71        for(int i=0; i<=top; ++i)
72           if(aa[i]!=0)
73             System.out.println(p[i]+" "+aa[i]);
74        int ans=0;
75        for(int i=1; i<n; ++i){
76            ans=gcd(ans, q[i]);
77        }
78        if(aa[0]>0)
79             bigN=bigN.divide(BigInteger.valueOf(2));
80        else ans*=2;
81        if(ans==0)
82             bigN=BigInteger.ZERO;
83        System.out.println(bigN+" "+ans);
84    }
85 }

?



?

轉載于:https://www.cnblogs.com/hujunzheng/p/3891180.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/531807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/531807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/531807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

廣東省計算機應用考試試題,2015廣東省計算機等級考試試題 二級C試題最新考試試題庫...

1、在計算機的應用中&#xff0c;“DSS”表示( B )A、管理信息系統 B、決策支持系統C、辦公自動化 D、人工智能2、計算機病毒是可以造成機器故障的( D )A、一種計算機設備 B、一種計算機芯片C、一種計算機部件 D、一種計算機程序3、防范病毒的有效手段&#xff0c;不正確的是( …

mysql查找大小寫_mysql查詢不區分大小寫

摘自&#xff1a;http://www.jb51.net/article/70884.htm當我們輸入不管大小寫都能查詢到數據&#xff0c;例如&#xff1a;輸入 aaa 或者aaA ,AAA都能查詢同樣的結果&#xff0c;說明查詢條件對大小寫不敏感。解決方案一&#xff1a;于是懷疑Mysql的問題。做個實驗&#xff1a…

poj 2492A Bug's Life(并查集)

1 /*2 目大意&#xff1a;輸入一個數t&#xff0c;表示測試組數。然后每組第一行兩個數字n,m&#xff0c;n表示有n只昆蟲&#xff0c;編號從1—n,m表示下面要輸入m行交配情況&#xff0c;每行兩個整數&#xff0c;表示這兩個編號的昆蟲為異性&#xff0c;要交配。3 要求統計交配…

mysql 有外鍵 怎么插入數據_外鍵約束的表怎么插入數據

有外鍵的情況應該先添加主表數據&#xff0c;再添加副表數據。如&#xff1a;有以下兩張表班級表&#xff1a;CLASSID NAME1 一班2 二班學生表&#xff1a;SID NAME CLASSID1 張三 12 李四 13 王五 2其中學生表中的CLASSID是班級表CLASSID的外鍵。現在要求在學生表中添加一條SI…

計算機在崗位上的應用,計算機崗位應用論文.doc

計算機崗位應用論文計算機崗位應用論文計算機崗位應用論文計算機崗位應用論文計算機崗位應用論文進入到新世紀以來,隨著我國國民經濟水平的提升,我國的計算機也得到了迅速的發展,計算機應用技術也已經廣泛的應用到了各個行業中,并且計算機應用技術對于促進這些行業的快速發展也…

poj1703Find them, Catch them(并查集以及路徑壓縮)

1 /*2 題目大意&#xff1a;有兩個不同的黑幫&#xff0c;開始的時候不清楚每個人是屬于哪個的&#xff01;3 執行兩個操作4 A a, b回答a, b兩個人是否在同一幫派&#xff0c;或者不確定5 D a, b表示a, b兩個人不在同一個幫派6 7 思路&#xff1a;利用并查集將相同幫…

計算機課程word教學,Word教學方法及使用技巧

Word教學方法及使用技巧來源:用戶上傳作者: 李志愛【摘 要】Word是一款實用的、簡單的具有編輯、排版、處理各種表格與圖片等功能的文字處理軟件。本文就教學中會采用的一些Word的教學方法進行了簡單的介紹與分析&#xff0c;并以泰山版初中計算機的教學計劃為例&#xff0c;重…

poj2186Popular Cows(Kosaraju算法--有向圖的強連通分量的分解)

1 /*2 題目大意&#xff1a;有N個cows, M個關系3 a->b 表示 a認為b popular&#xff1b;如果還有b->c, 那么就會有a->c 4 問最終有多少個cows被其他所有cows認為是popular&#xff01;5 6 思路&#xff1a;強連通分量中每兩個節點都是可達的&#xff…

yum刪除mysql數據庫_MySQL數據庫之Centos中徹底刪除Mysql(rpm、yum安裝的情況)

本文主要向大家介紹了MySQL數據庫之Centos中徹底刪除Mysql(rpm、yum安裝的情況) &#xff0c;通過具體的內容向大家展現&#xff0c;希望對大家學習MySQL數據庫有所幫助。我用的centos6&#xff0c;mysql讓我整出了各種問題&#xff0c;我想重裝一個全新的mysql&#xff0c;yum…

計算機視覺領域常見期刊和會議,計算機視覺領域常見期刊和會議

會議&#xff1a;ICCV&#xff1a; IEEE International Conference on Computer Vision(每兩年舉辦一次&#xff0c;由IEEE主辦&#xff0c;百度百科&#xff1a;https://baike.baidu.com/item/iccv/7054436?fraladdin&#xff0c;ICCV 2017&#xff1a;http://iccv2017.thecv…

mysql怎么新增_mysql怎么新增用戶

匿名用戶1級2018-01-27 回答展開全部首先以root身份登錄到MySQL服務器中。$ mysql -u root -p當驗證提示出現的時候&#xff0c;輸入MySQL的root帳號的密碼。創建一個MySQL用戶使用如下命令創建一個用戶名和密碼分別為"myuser"和"mypassword"的用戶。mysql…

江西財經大學計算機排名2019,2019年全國商科院校評價報告出爐 江西財經大學排名第七...

中國江西網/江西頭條新聞客戶端訊 記者鄭周贇報道&#xff1a;6月5日&#xff0c;江西財經大學應用統計研究中心發布了2019年全國商科院校評價報告&#xff0c;江西財經大學在46所指標數據完整的商科院校中綜合得分排名第七。該報告權衡了指標的完備性和可獲得性&#xff0c;確…

Uvaoj10054 - The Necklace

1 /*2 題意&#xff1a;打印歐拉回路&#xff01;3 思路&#xff1a;開始時不明白&#xff0c;dfs為什么是后序遍歷&#xff1f; 4 因為歐拉回路本身是一條回路&#xff0c;那么我們在dfs時&#xff0c;可能存在提前找到回路&#xff0c;這條回路可能不是歐拉回路&…

w7計算機應用放大按鍵,Win7窗口最大化和最小化快捷鍵是什么

Win7窗口最大化和最小化快捷鍵是什么Win7有很多快捷鍵&#xff0c;你都知道多少呢&#xff1f;今天小編給大家科普的是win7窗口最大化和最小化快捷鍵&#xff0c;下面就一起來了解看看吧&#xff01;Windows 鍵 方向鍵“↑”使當前使用的窗口最大化。Windows 鍵 方向鍵“↓”…

s7-1200跟mysql_讓西門子S7-1200直接連接MySQL數據庫!!!

最近項目上有個需求&#xff0c;要把采集的數據存儲到數據庫中&#xff0c;當前西門子有很多方法&#xff0c;必讀IDB&#xff0c;還有通過WINCC的腳本&#xff0c;第三方的軟件等等&#xff0c;但是隨著發展&#xff0c;有些需求希望設備直接到數據庫&#xff0c;比如云端的RD…

uva oj 567 - Risk(Floyd算法)

1 /*2 一張有20個頂點的圖上。3 依次輸入每個點與哪些點直接相連。4 并且多次詢問兩點間&#xff0c;最短需要經過幾條路才能從一點到達另一點。5 6 bfs 水過7 */8 #include<iostream>9 #include<cstring> 10 #include<vector> 11 #include<cstdio> 12…

10034 - Freckles 克魯斯克爾最小生成樹!~

1 /*2 10034 - Freckles3 克魯斯克爾最小生成樹&#xff01;&#xff5e; 4 */5 #include<iostream>6 #include<cstdio>7 #include<cmath>8 #include<algorithm>9 using namespace std; 10 11 struct node{ 12 double x, y; 13 }; 14 15 struct t…

win7個人計算機的ip地址,win7計算機ip地址查詢_win7本機ip地址查詢

2016-12-09 11:40:21查找計算機的ip地址的方法&#xff1a;點擊你的電腦桌面左下角的“開始”找到“運行”點擊運行, 在出現的對話框里面輸入“cmd” 點擊確定然后就會出現一個黑色的命令行窗口,你會看到“&...2016-12-19 15:59:44手機設置靜態IP 1、點設置-線網絡 2、WLAN…

最全的mysql 5.7.13_最全的mysql 5.7.13 安裝配置方法圖文教程(linux) 強烈推薦!

linux環境Mysql 5.7.13安裝教程分享給大家&#xff0c;供大家參考&#xff0c;具體內容如下1系統約定安裝文件下載目錄&#xff1a;/data/softwareMysql目錄安裝位置&#xff1a;/usr/local/mysql數據庫保存位置&#xff1a;/data/mysql日志保存位置&#xff1a;/data/log/mysq…

iis 日志 post數據_云原生日志的趨勢(1):logscape和logiq

作為日志產品的PM&#xff0c;跟進國內外日志產品動向是個長期工作。這幾天翻新一些歷史記錄&#xff0c;發現logscape自2017年開源以來&#xff0c;突然2019年10月又更新了一會。于是順著翻翻logscape的github賬號&#xff0c;起了興致來寫點文字。https://github.com/logscap…