题目如标题,本人常用的语言是JavaScript和C#,打算用这两种语言都写一下代码,主要是为了让自己加深印象。
其实,这些都是大学时代该做的事情,所以,我现在算是在还债吧。
好了,废话少说一点,代码多写一些,下面就直接贴代码吧:
JavaScript版
var primes=[2,3,5];//已找到的素数
var count=3;//已找到的素数个数
function getPrime(Max){
var factor=2
for(var n=7;n<=Max;n+=factor){
factor=6-factor;
for(var i=0;primes[i]*primes[i]<=n;i++){
if(!(n%primes[i])){
break;
}
}
if(primes[i]*primes[i]>n){
primes[count]=n;
count++;
}
}
return primes;
}
C#版
class Program
{
static void Main(string[] args)
{
List<int> primeList = GetPrime(1000);
for (int i = 0; i < primeList.Count;i++){
Console.WriteLine(primeList[i]);
}
}
private static List<int> GetPrime(int max)
{
List<int> PrimeList = new List<int>();
PrimeList.Add(2);
PrimeList.Add(3);
PrimeList.Add(5);
int count = 3;
int factor = 2;
int i;
for (int n = 7; n < max;n+=factor){
factor = 6 - factor;
for (i = 0; PrimeList[i] * PrimeList[i] <= n;i++){
if(n%PrimeList[i]==0){
break;
}
}
if(PrimeList[i]*PrimeList[i]>n){
PrimeList.Add(n);
count++;
}
}
return PrimeList;
}
}
这种算法的空间复杂度是存放所有素数的数组空间,它的思路如下图:

还有一种算法的思路图是:

这种算法的空间复杂度是存放所有数的数组空间,需要使用数组和链表的组合,以达到快速删除数据的目的,链表我不太会用,暂时不写代码了。有兴趣的同学可以自己根据思路图进行编码!
网友评论