輸出100以內的質數及拓展

2021-10-02 12:45:09 字數 3153 閱讀 7965

質數又叫素數,是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。

常見方法

根據質數定義用小於i大於1的所有數對變數i進行取餘,若只有變數i本身能取余為0則說明變數i為質數。

**如下:

("所用時間"

+(end - start)

+"ms");

}}輸出結果:

由於數量過小所以計算時間為0ms,此時要將100改為10萬,由於列印輸出也需要處理時間,所以僅計算質數個數

**如下:

}//若標誌還為真,這證明該數是質數

if(flag ==

true

) flag =

true;}

long end = system.

currenttimemillis()

; system.out.

println

("所用時間"

+(end - start)

+"ms");

system.out.

println

("質數個數:"

+count);}

}看似計算結果用時不久,但這只是10萬內的質數,若要求的是100萬,用時就已經是非常久了,我等了好久也沒算出來,所以要對該程式演算法進行優化

優化一:

若變數i已經被除盡則無需再繼續下去,應當及時跳出迴圈。

public

class

zhishu

}//若標誌還為真,這證明該數是質數

if(flag ==

true

) flag =

true;}

long end = system.

currenttimemillis()

; system.out.

println

("所用時間"

+(end - start)

+"ms");

system.out.

println

("質數個數:"

+count);}

}

計算結果:

可以很明顯的看到,經過演算法優化後用時大大減少,但對於100萬的資料依然需要非常久的時間,我也是沒有等出來。

優化二:

這是就需要從變數i要除的數進行優化,我們都知道質數除了2之外都是奇數,這相當於減少了一半的計算量,但是這遠遠不夠。這時我們就可以對i進行開根,這樣計算量就會大大減少。

**如下:

public

class

zhishu

}//若標誌還為真,這證明該數是質數

if(flag ==

true

) flag =

true;}

long end = system.

currenttimemillis()

; system.out.

println

("所用時間"

+(end - start)

+"ms");

system.out.

println

("質數個數:"

+count);}

}

計算結果:

優化演算法後的所用時間僅為13ms,這比不進行優化的時間減少了非常非常多。

使用continue對程式進行重構

public

class

zhishu

}//能到執行到這的都是質數

count++;}

long end = system.

currenttimemillis()

; system.out.

println

("所用時間"

+(end - start)

+"ms");

system.out.

println

("質數個數:"

+count);}

}

計算結果:

使用優化後的演算法對1000萬以內的質數進行計算

**如下:

public

class

zhishu

}//能到執行到這的都是質數

count++;}

long end = system.

currenttimemillis()

; system.out.

println

("所用時間"

+(end - start)

+"ms");

system.out.

println

("質數個數:"

+count);}

}

將100以內的所有質數輸出

方法一 方法一 根據質數的定義得出的方法 public static void isprimenumber2 方法二 方法二 這個 用了兩層迴圈。外層迴圈列舉從2 100之間的每乙個整數 作為被除數 然後在內層迴圈中用從2到它之間的數去除它,如果找到了乙個能夠整除它的數,內層迴圈將立即跳出 此時j....

列印100以內的質數及優化

public class demo3 優化方式一 遇到第乙個j 能整除 i 就退出迴圈,不用執行其他的 i j 只對本身是非質數的自然數起到優化作用 break if flag true 重置 flag 為true flag true 獲取當前時間距離1970 01 01 00 00 00的毫秒數 ...

python 求100以內素數 質數和

import math def is prime n 簡化問題,先利用函式判斷是否為質數 if n 1 是賦值,才是判斷,切記切記 return false for i in range 2,int math.sqrt n 1 質數判斷條件,注意 1 if n i 0 return false re...