求素数和的更有效方法是什么?

疯狂的程序员

我正在开发一个程序,该程序跟踪将所有质数的总和达到某个数字所需的时间,并试图找到获得该值的最有效方法,因为我有一个秒表 (System.诊断)跟踪需要多长时间。目前,我可以使用以下代码在大约 33-34 秒内找到最多 40,000 的所有质数的总和:

private void ListThePrimes()
        {
            prime = false;
            while (primes < 30000)
            {
                for (int i = 2; i < n; i++)
                {

                    output = n % i;
                    if (output == 0)
                    {
                        primeNum = i;
                        prime = false;
                        break;
                    }
                    else
                    {
                        prime = true;
                    }
                }
                if (prime == true)
                {
                    sum += primeNum;
                    primes++;
                }
                n++;
            }
        }

但是,我觉得有一种方法可以更有效地编写此代码,因为我的目标是用更高的数字(如 200,000 左右)达到相同的时间。这是我的秒表代码,如果需要,我会在单击按钮时执行该代码:

    var timer = new Stopwatch();
            timer.Start();
            ListThePrimes();
            timer.Stop();
            TimeSpan timeTaken = timer.Elapsed;
            string foo = timeTaken.ToString(@"m\:ss\.fff");
            MessageBox.Show("The sum is " + sum + ". It took this program " + foo + " seconds to run.");

如果有人能让我知道是否有更有效的方法来执行此操作,我将不胜感激。

杰米克

您需要优化获得素数的方式,您的方式效率极低。这样做的常用方法是使用Eratosthenes 筛使用这种方法,我可以在几毫秒内轻松获得最多 100000 的所有质数。除此之外,总结它们是微不足道的。

var n = 100000;
var a = Enumerable.Range(0,n+1).Select(_ => true).ToArray();

for(var i=2;i<Math.Sqrt(n);i++)
{
    if(a[i])
    {
        for(var j = i*i;j<=n;j += i)
        {
            a[j] = false;
        }
    }
}

var result = a.Select( (x,i) => new {IsPrime = x,Prime = i})  
              .Where(x => x.IsPrime && x.Prime > 1) 
              .Sum(x => x.Prime);
    
Console.WriteLine(result);

现场示例:https : //dotnetfiddle.net/eBelZD

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在main方法或初始化构造函数中,更有效的初始化是什么?

Java递归求幂方法使递归更有效

比函数引用更有效的方法?

分段上传文件和分块上传文件有什么区别?哪种方法更有效?

阅读有效,更有效和有效的现代C ++(和STL)的首选顺序是什么?

知道矩阵对称且为正半定数的更有效的矩阵求逆方法

加入元组的更有效方法?

将RGBW像素数据映射到RGB进行可视化的有效方法是什么

比使用“ for”循环更有效的方法

删除列表中连续整数的最快,更有效的方法是什么?

在Pandas中根据其他变量结果填充新变量的更有效方法是什么

用JavaScript解决此问题的更有效的方法是什么

什么循环更有效?

从python中的字典列表中提取子字典的更有效方法是什么?

在javascript中2个对象之间返回匹配元素数组的最有效方法是什么?

在数组中计算均值的更有效方法是什么?

为1D numpy数组创建成对2D数组的更有效方法是什么?

Django注释-更有效的方法?

求模数比And运算符更有效吗

JavaScript:它可以工作,但是编写此函数的更有效方法是什么?

什么是C#中的.Any和.Count更有效(扩展方法)

在A *搜索中选择/排序最佳节点的更有效方法是什么?

在数据消耗,套接字或REST方面,更有效的方法是什么?

为初学者构建素数数组的更有效方法

求两个数的平方和的平方根的最有效方法是什么?

在 mysql 的同一个表上,比 LEFT JOIN 包含空行更有效的方法是什么?

将这个 JavaScript 对象转换为更有用的结构的最有效方法是什么?

仅计算字符串数组中的字母数字字符的更有效方法是什么?

在一组集合中检查重复项的更有效方法是什么