素數是整數王國的基石,理解素數的性質對解決整數問題十分必要。
同時,對素數的判定也是初學者練習演算法技巧的難得素材。
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...
演算法 素數的篩法
本文實現了素數的篩法演算法。在寫 的過程中,時不時會遇到求解素數的任務,特意將素數求解方法總結成文章以備不時之需。素數的求解演算法大概有兩種。一種是列舉某一範圍的數,然後逐個判斷該數是否為素數。這種方法簡單但效率不高。另一種方法是使用素數的篩法將某一範圍內的所有素數篩選出來,然後再打表。篩法的原理很...