【发布时间】:2011-12-20 22:41:09
【问题描述】:
我目前正在使用这种方法,效果很好:
private static List<long> GetPrimeNumbers(long number)
{
var result = new List<long>();
for (var i = 0; i <= number; i++)
{
var isPrime = true;
for (var j = 2; j < i; j++)
{
if (i % j == 0)
{
isPrime = false;
break;
}
}
if (isPrime)
{
result.Add(i);
}
}
return result;
}
上面的算法可能是最好的吗?
100000以上的时候真的很慢。
我的意思是,找到小于或等于给定数的素数的最佳、性能最好的算法是什么?
【问题讨论】:
-
保留给定范围内已知素数的字典:primes.utm.edu/lists/small/1000.txt 无需计算。只有内存要存储。
-
给定数的质数没有任何意义。您的意思是小于或等于给定数的素数?
-
@hemal 他的意思是质数相乘得到数字
-
@GvS 你的意思是主要因素吗?他的算法遍历所有小于或等于传递参数的数字,通过蛮力检查每个数字是否为素数,并将素数添加到结果列表中。它似乎不像你写的那样做。
-
@GvS - 问题中的方法列出了直到
number的所有素数(加上两个非素数 0 和 1),并且“工作正常”,所以显然这就是他想要的.
标签: c# performance algorithm primes