求小于N的所有素数

2018-01-22  本文已影响43人  心彻

题目如标题,本人常用的语言是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;
        }
    }

这种算法的空间复杂度是存放所有素数的数组空间,它的思路如下图:


算法思路图

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


算法思路图

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

上一篇 下一篇

猜你喜欢

热点阅读