• 沒有找到結果。

第二章 JAVA 相關內容

第二節 偶數的分拆數

publicclass拆解偶數為2質數之和 {

publicstaticvoid main(String[] args) { String 字串;// 用於儲存使用者輸入的字串。

n=Integer.parseInt(字串);// 把N設定為使用者所輸入之偶數

for(inti=2;i<=n/2;i++)//哥德巴赫基本定義之判別方式,以任一大於2

staticboolean isPrime(int N)// 質數的判別式(使用JAVA內建質 數程式來判別)

{

BigInteger bi = BigInteger.valueOf(N);

returnbi.isProbablePrime(10);

}}

8

二.顯示輸出結果

圖三 JAVA 程式在 ECPLCE 上的顯示 以輸入54為例

圖四 顯示的輸出結果 共有5組分別是

A 7 11 13 17 23

B 47 43 41 37 31

9 public static void main(String[] args) {

String 字串; //用於儲存使用者輸入的字串 int n; //用於儲存整數 n

int sum2=0,count=0;//用於表示SUM2跟COUNT從0開始計算 int[] a;a=new int[10000000];//參數宣告

字串=JOptionPane.showInputDialog("輸入一個任意偶數");//視窗化的的顯示文字 n=Integer.parseInt(字串);

for (int j=2;j<=n;j++)

//判斷輸入是否為偶,是的話跑2~輸入偶數之間所有的分拆數 {if(j%2== 0)

{a[sum2]=j;

sum2++;

}}

for(int x=0;x<sum2;x++)

//行把產生出來偶數分別帶入哥德巴赫猜想分解的邏輯概念裡並把拆解的組數累 加起來

{for(inti=2;i<=a[x]/2;i++){

if(isPrime(i)&&isPrime(a[x]-i)) {count++;}}

System.out.println("共有"+count+"組");// 顯示組數 count=0;}}//把拆解的組數歸0,再跑一次迴圈

如跑完4後1組把組數歸0後再跑6那一組直到跑到輸入的n為止 staticbooleanisPrime(int N){

BigInteger bi = BigInteger.valueOf(N);

returnbi.isProbablePrime(10);}}

//用於質數的判別式(使用JAVA內建質數程式來判別)

10

4 到 1000 的偶數的分拆數最大的為 990,共有 52 組不同的分拆質數組合,

偶數 4、6、8、12 分拆數都是 1,是最少的分拆質數組合,大於12以後的偶數,

的哥德巴赫的分拆數一定大於一。一般假設,當偶數越大時,所包含之質數的範 圍越大,包含的質數越大時,所可以配對成偶數的機率變大,所以組數會隨之越 變越大(如圖五)。

圖五 4~1000 偶數跟分拆數分布圖

大於 68 以後的偶數,的哥德巴赫的分拆數一定大於二,大於488後的哥 德巴赫的分拆數,已經沒有個位數的組數。(如圖六)。

11

圖六 分拆數個位數的對應數字圖

12

第三章用統計軟體分析哥德巴赫

本章共三小節,第一節為統計的觀念切入的哥德巴赫分拆數,第二節為統計 相關軟體處理哥德巴赫偶數的分拆數,第三節為結論。

第一節以統計的觀念切入的哥德巴赫分拆數

本節動機來自於,當研究者直覺看到圖一的一個想法,如果把偶數當成受 測者,哥德巴赫的拆解當成問卷,組數當成問卷分數時,那會不會出現有趣的結 果呢?那研究者是否能用統計的角度去分析看看這個世紀末的難題呢?

圖七 偶數跟分拆數的散佈圖 4~ 1000000 取自 (網路維基百科)

在統計學上,涉及兩個連續變項的關係多以線性關係的形式進行分析,線性 關係是將兩個變項的關係以直線方程式的原理來估計相關聯的強度,例如積差相 關就是用來反映兩個連續變項具有線性關係強度的指標;積差相關係數越大,表 示線性關聯越強,反之則相反,可能兩變項間沒有關聯性或是呈現非線性關係。

迴歸分析則是運用於變項間的關係來進行解釋跟預測的統計技術,在線性關 係的假設成立之下,迴歸分析是以直線方程式來進行統計的決策與運用,又稱線 性迴歸,一般來說兩變項間先以相關係數去檢驗線性關聯的強度,若達相關統計 水準r0.7,便可以用迴歸來進行進一步的預測與解釋,簡單線性迴歸的假設公 式為YijbXij ij

13

研究者將用統計軟體 SPSS17 為工具,假設簡單回歸分析存在,分析相關的 資料 4~370000,如圖六是用 SPSS17 處理偶數跟分拆數的散佈圖 4~500000 的散佈 圖。

圖八 偶數跟分拆數的散佈圖 4~ 500000

所以研究者將以 4~100000,4~370000 及 4~450000 為例來分析,討論是否能 以簡單線性迴歸去處理哥德巴赫猜想這個世紀的難題當偶數越大時,偶數跟哥德 巴赫的分拆數的離散分布圖的關聯性是否越強。

14

15

16

1466.38 974.429 184999

由表八可知 Pearson`s 分析可得知,偶數跟哥德巴赫的分拆數這兩個變項之

17

184997 407346.715

總數 1.757E1

18 礎,簡單迴歸與相關分析主要的結果相同。Pearson 相關係數與皆為.756>0.7,

這幾個檢定質均相同,達顯著水準。

1722.61 1146.479 224999

由表十三可知 Pearson`s 分析可得知,偶數跟哥德巴赫的分拆數這兩個變項 之間相關高達.756>.70(P.00)(高度相關),表示偶數跟哥德巴赫的分拆數存在高 度相關。

19

224997 562665.306

總數 2.957E1 1

224998

a. 預測變數:(常數), 偶數 b. 依變數:分拆數

20 礎,簡單回歸與相關分析主要的結果相同。Pearson 相關係數與皆為.756>0.7,

這幾個檢定質均相同,達顯著水準。

21

第三節結論

研究者由第二小節分別對 4~100000,4~370000 及 4~450000 為例,做偶數與 其對應的哥德巴赫分拆數的離散分布圖的簡單線性迴歸分析。我們可由報表得知,

當以 4~100000 為例,由 Pearson`s 分析可得知,偶數跟哥德巴赫的拆解數這兩個 變項之間相關高達.75>.70,且簡單線性迴歸的直線方程式的斜率為 56.2%,表示 其是具有高度正相關的關聯性。以 4~370000 為例,由 Pearson`s 分析可得知,偶 數跟哥德巴赫的拆解數這兩個變項之間相關高達.756>.70,以上證據顯示偶數越 大,哥德巴赫的分拆數越大,且簡單線性迴歸的直線方程式的斜率為 57.1%,以 4~450000 為例,由 Pearson`s 分析可得知,偶數跟哥德巴赫的拆解數這兩個變項 之間相關高達.756>.70,且簡單線性迴歸的直線方程式的斜率為 57.2%。

以上可以表示,當偶數越大時與其對應的哥德巴赫分拆數的離散分布圖的簡

跟450000 100000~370000

370000 ,所以產生了類似這樣

22

publicclass EP1 {

publicstaticvoid main(String[] args) {

String 字串;// 用於儲存使用者輸入的字串。 longpreTime = System.currentTimeMillis();

//取得程式開始的系統時間 for(inti=2;i<=n/2;i++)

//哥德巴赫基本定義之判別方式,以任一大於2之偶數可拆解承認兩個質數的和,

固兩質數和最高上限為此偶數,且兩質數分別不會超過此偶數的一半。

{

23

if(isPrime(i)&&isPrime(n-i)){

System.out.println("A="+i+",B="+(n-i));

sum++;

}}

long aftTime = System.currentTimeMillis();

//取得程式跑完後的系統時間 long allTime = aftTime - preTime ; //計算出程式執行所需的時間

System.out.println("程式執行所需時間:"+"毫秒" + allTime);

//顯示程式花費的時間

System.out.println("共有"+sum+"組");}

staticboolean isPrime(int N)

// 質數的判別式(使用JAVA內建質數程式來判別)

{

BigInteger bi = BigInteger.valueOf(N);

returnbi.isProbablePrime(10);

24

圖九 顯示計算機 A 計算一億的哥德巴赫猜想的分拆數所需的毫秒 運算一億的哥德巴赫猜想的分拆數需要 98798 毫秒,共有 291400 組。

(二)顯示輸出結果:計算機 B

圖十 顯示計算機 B 計算一億的哥德巴赫猜想的分拆數所需的毫秒

25

運算一億的哥德巴赫猜想的分拆數需要237094毫秒,共有291400組。

我們可以明顯看到237094/98798=2.39≒2.4倍的計算時間,這表示硬體配備的 更換與否是對於科學計算的數值分析計算時間是有絕對幫助的,這邊當然也要考 慮計算機A跟B是否因為本身作業系統OS位元數不同有關,所以支援的記憶體上 線不同,我們知道記憶體的運算速度是大於cpu的計算,所以當OS支援的記憶體 越大,計算程式的速度理論上是應該有所提升的,如計算機A是64bit,可支援的 記憶體上限就高達24GB記憶體,比計算機B是32bit的3.25gb高出了7.4倍左右,這 還不考慮記憶體本身的GHz等其他因素,以上問題再將在第二小節,會有進一步 的討論。

26

publicclass EP1 {

publicstaticvoid main(String[] args) {

String 字串;// 用於儲存使用者輸入的字串。 longpreTime = System.currentTimeMillis();

//取得程式開始的系統時間

long aftTime = System.currentTimeMillis();

//取得程式跑完後的系統時間 long allTime = aftTime - preTime ;

27

//計算出程式執行所需的時間

System.out.println("程式執行所需時間:"+"毫秒" + allTime);

//顯示程式花費的時間

System.out.println("共有"+sum+"組");}

staticboolean isPrime(int N)

// 質數的判別式(使用JAVA內建質數程式來判別)

{

BigInteger bi = BigInteger.valueOf(N);

returnbi.isProbablePrime(10);

}}

計算機 C 配備如下,統一以計算機 C 作為標準,它們不同的差別在於是用 WINDOWS 作業系統還是 LINUX 作業系統,同為 32 位元的作業系統。

表十八 計算機 C 配備如下

計算機 C-1 計算機C-2

CPU 美商 i7-2600 3.4GHZ 美商 i7-2600 3.4GHZ 記憶體大小 創建 DDR3 1366 4GB 創建 DDR3 1366 4GB 硬碟 硬碟 7200 轉 16MB 快取 硬碟 7200 轉 16MB 快取

顯示卡 內顯 內顯

主機板 P8H61 P8H61

作業系統 W7 SP1 32BIT 專業版版 UBUNTU 13.04 32BIT 版

一、顯示運算解結果

(一)計算機C-1

28

圖十一 顯示計算機 C-1 計算一億的哥德巴赫猜想的分拆數所需的毫秒 運算一億的哥德巴赫猜想的分拆數需要 167759 毫秒,共有 291400 組。

(二)計算機C-2

運算一億的哥德巴赫猜想的分拆數需要119540毫秒,共有291400組。

計算C-1跟C-2的差別得到167759/119540=1.403倍。

實測結果,如SUM公司的在JAVA官網表示在同樣系統硬體配備下,LINUX的效 能比WINDOWS的系統更快的達到目標。

因此,測試用的 WINDOW7 專業版 SP1 32 位元跟 LINUX Ubuntu 32 位元 13.04 版差了 1.403 倍的運算速度。

29

第三節 結論

研究者以計算機 A 所需時間為一單位來做為比較基礎,從表 20 可以明顯得 到:在相同的配備下 LINUX 系統原比 WINDOWS 系統能提供更多的運算效能,

所以當預算不足時或是無特需求時,在科學計算上的選擇來說 LINUX 作業系統 是相較實用的,但也觀察到一個有趣的現象,如C-2安裝 32 位元的 LINUX 的 運算速度並沒有比計算機 A 安裝 64 位元的 WINDOWS 慢(32 位元記憶體最多支 援到 3.25GB RAM),這可以推論到,當如果是以用 64 位元的 LINUX 來執行相關 的程式,時間是能在大幅度縮減的,因記憶體的運算速度是大於 cpu 的計算速度,

所以當作業系統能使用的記憶體越大,計算程式的速度在理論上是因該在有所提 升的。

表十九 比較表

需毫秒為 效能比

以計算機A時間為一單位

計算機A 98798 1

計算機B 237094 2.4

計算機C-1 167759 1.70

計算機C-2 119540 1.21

30

參考文獻

王建興,王舜正(2008)。Thinking in JAVA 4/e 中文版。台北市:碁峯資訊。

邱皓政(2010)。SPSS 量化研究與統計分析。台北市:五南書局。

維基百科,自由的百科全書(2012)。2012:06:30,取自:

http://zh.wikipedia.org/wiki/哥德巴赫

相關文件