C# 4.0 降低筛选法求素数的时间复杂度 请考虑以下代码 public void printSievePrimes() { int[] temp = new int[count]; for (int j = 2; j * j < temp.Length; j++) { for (int i = j * j; i < temp.Length; i += j) { primesFound[i] = false; } } for (int i = 2; i < temp.Length; i++) { if (primesFound[i] != false) Console.WriteLine("PrimeFound is:" + i); } } public void printSievePrimes() { int[]temp=新的int[计数]; 对于(int j=2;j*j
上述方法被称为寻找素数的筛法 1从2开始,然后用4,6,8等后续的factors来抵消它 2从3开始,然后将其抵消,如9、12、15 3.4.已被取消 4从5开始…依此类推 我已经做到了,而且效果很好。但是我想减少 对于O(n)或O(nlogn)来说很复杂,可以做什么?C# 4.0 降低筛选法求素数的时间复杂度 请考虑以下代码 public void printSievePrimes() { int[] temp = new int[count]; for (int j = 2; j * j < temp.Length; j++) { for (int i = j * j; i < temp.Length; i += j) { primesFound[i] = false; } } for (int i = 2; i < temp.Length; i++) { if (primesFound[i] != false) Console.WriteLine("PrimeFound is:" + i); } } public void printSievePrimes() { int[]temp=新的int[计数]; 对于(int j=2;j*j,c#-4.0,C# 4.0,上述方法被称为寻找素数的筛法 1从2开始,然后用4,6,8等后续的factors来抵消它 2从3开始,然后将其抵消,如9、12、15 3.4.已被取消 4从5开始…依此类推 我已经做到了,而且效果很好。但是我想减少 对于O(n)或O(nlogn)来说很复杂,可以做什么? 另一个问题是我必须在数组中循环以获得最大素数有没有办法找到使用有效方法找到的最大素数?您发布的算法的复杂性为O(N log(N))。你可以通过这个改变来加快速度。。。我不知道它是否会提高算法的复杂性(可能会) for(int j
另一个问题是我必须在数组中循环以获得最大素数有没有办法找到使用有效方法找到的最大素数?您发布的算法的复杂性为O(N log(N))。你可以通过这个改变来加快速度。。。我不知道它是否会提高算法的复杂性(可能会)
for(int j=2;j*j
基本上。。。您发布的代码不会跳过数字4,因为它从不检查该数字是否已被取消。只需计算Sum[j=2..Sqrt(j)]((N-j^2)/j)其顺序是O(nloglogn)在文献中walfram说:
for (int j = 2; j * j < temp.Length; j++)
{
if (primesFound[j] == false) continue;
for (int i = j * j; i < temp.Length; i += j)
{
primesFound[i] = false;
}
}