Java程式設計演算法基礎 素數與篩法

2021-06-26 14:14:09 字數 1650 閱讀 7903

素數是整數王國的基石,理解素數的性質對解決整數問題十分必要。

同時,對素數的判定也是初學者練習演算法技巧的難得素材。

1.試除法

判斷乙個數n是否是素數,從2---n-1之間判斷看是否有可以整除n

1既不是素數也不是合數

1.1                    2---n-1

package no5;

public class test5

}*/static void f(int n)

else

}if(isprime)

system.out.println(i); }}

} public static void main(string args)

}當n很小時候,所用時間還可以

當n = 10000000,我感覺10分鐘都跑不出來結果來= =

1.2                          2---n/2      2-sqrt(n) 這樣可以一下子去掉一半的步驟,提高了效率

package no5;

public class test5

else

}if(isprime)

system.out.println(i); }}

} public static void main(string args)

}

2.素數篩選法

package no5;

public class test6

} int num = 0;

for(int i = n-1; num < 10;i--)

}} public static void main(string args)

}

結果:9999991

9999973

9999971

9999943

9999937

9999931

9999929

9999907

9999901

9999889

篩選法: 如乙個數能夠被4整除,則該數必然能被2整除

首先byte陣列的初始值為0,預設初始均為素數

從2開始一直到n/2, 先排除2的倍數,接著排除3的倍數,以此類推

**非常簡明,

使用陣列存放已經找到的素數。

以此為基礎尋找下乙個素數,即從最大素數向上尋找,用已經有的素數試除。

用這個方法求第100001個素數,看看耗時情況。

package no5;

//第05講-素數與篩法_陣列存素數

public class test7

}if(isprime)

} int count = 0;

for(int i = 0; i < prime.length; i++)

system.out.print(count); }

public static void main(string args)

}

這麼課程,我延誤了快二周了,完了,完成了33%,我得哭去,提交的71%

= =好多都是延誤提交= =

好煩= =

演算法 素數篩法

素數篩法是acm 及各大比賽中必須熟練掌握的最低階的演算法,在已知某些素數的情況下對未判斷的數進行篩選,篩選掉必然不是素數的數。如何對數進行篩選,依據素數的性質,某個除1以外的正整數是素數,則該數的倍數一定不是素數 從1 10中篩選出所有素數 步驟當前元素12 3456 78910 原始陣列 000...

演算法之素數篩法

1 方法一 判斷是否是乙個素數 int isprime int a 計算列舉上界,為防止double值帶來的精度損失,所以採用根號值取整後再加1,即寧願多列舉乙個,也不願少列舉乙個數 2 方法二 判斷是否是乙個素數 mark 標記陣列 index 素數個數 int prime else return...

演算法 素數的篩法

本文實現了素數的篩法演算法。在寫 的過程中,時不時會遇到求解素數的任務,特意將素數求解方法總結成文章以備不時之需。素數的求解演算法大概有兩種。一種是列舉某一範圍的數,然後逐個判斷該數是否為素數。這種方法簡單但效率不高。另一種方法是使用素數的篩法將某一範圍內的所有素數篩選出來,然後再打表。篩法的原理很...