Unity环境下的质数求解探究

来源:互联网 发布:观察者模式 javascript 编辑:程序博客网 时间:2024/05/21 16:37
        以为求解质数很简单,没想到深入了解后发现里面全是道道~
以下代码结果基于 unity5 编辑环境下求解得出:
 
①:求N以内的所有质数并返回
        //筛法 1000万以內 0.5666879秒 一亿以内 6秒public void PrimeNumber_Sieve(int maxValue){float startTime = Time.realtimeSinceStartup;bool[] primes = new bool[maxValue+1];for (int i=0; i<primes.Length; i++) {primes[i] = true;}primes [0] = false;primes [1] = false;for (int i = 2; i<primes.Length; i++) {if(primes[i] == true){for (int j = 2*i; j<primes.Length; j+=i)primes[j] = false;}}//統計int num = 0;for (int i = 0; i<primes.Length; i++) {if(primes[i] == true)num++;}float endTime = Time.realtimeSinceStartup;Debug.Log("运算时长:"+(endTime-startTime));Debug.Log ("prime's count:"+num);}//方法一:100万以内 0.6371464秒 ; 1000万以内 14秒public List<int> PrimeNumber(int maxValue){float startTime = Time.realtimeSinceStartup;List<int> primes = new List<int>();primes.Add(2);bool isPrime = false;for(int i = 3;i<maxValue+1;i+=2){int sqrtValue = (int)Mathf.Sqrt(i);for(int j = 0;j<primes.Count;j++){if(primes[j]>sqrtValue){isPrime = true;break;}if(i%primes[j] == 0){//不是质数isPrime = false;break;}isPrime = true;}if(isPrime)primes.Add(i);}float endTime = Time.realtimeSinceStartup;Debug.Log("运算时长:"+(endTime-startTime));Debug.Log (primes.Count);return primes;}
代码解释就不说了,如果看不懂,可以查看:http://blog.csdn.net/program_think/article/details/7032600。

0 0
原创粉丝点击