【问题标题】:Optimizing the search for prime numbers优化素数搜索
【发布时间】:2018-03-22 17:25:41
【问题描述】:

我创建了一个查找素数的函数,但该过程需要很长时间并且占用大量内存。我需要通过提高时间和内存效率来优化我的代码。

函数分为两部分:

第一部分计算奇数,第二部分是isSimple方法,它搜索素数的奇数。

我通过将 Math.Sqrt(N) 移到 for 循环之外取得了一些进展,但我不确定下一步该做什么。

欢迎提出任何建议。

计划:

class Program
{
    static void Main(string[] args)
    {
        //consider odd numbers
        for (int i = 10001; i <=90000; i+=2)
        {
            if (isSimple(i))
            {
                 Console.Write(i.ToString() + "\n");
            }
        }
    }
  //The method of finding primes
    private static bool isSimple(int N)
    {
        double koren = Math.Sqrt(N);

         // to verify a prime number or not enough to check whether it is //divisible number on numbers before its root
        for (int i = 2; i <= koren; i++)
        {   
            if (N % i == 0)
                 return false;
        }
        return true;
    }
}

【问题讨论】:

  • 欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 On topichow to ask 在这里申请。你只是把一个家庭作业问题抛给了我们。我们不知道您的问题是什么。
  • 这种方法不吃内存。如果您想用速度换取内存,请考虑 Eratosthenes 筛
  • 我需要关于如何更改代码的建议,对我来说,速度和乐趣消耗的内存
  • @Jack 谢谢,明白了。前面介绍过,而不是划分根。并在循环之前插入它

标签: c# algorithm primes


【解决方案1】:

您正在使用 for (int i = 2; i &lt;= koren; i++) 检查所有可能的除数,这会浪费时间。您可以通过仅检查奇数除数将所用时间减半。你知道给定的数字N 是奇数,所以没有偶数可以是除数。请改用for (int i = 3; i &lt;= koren; i+=2)

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 2015-07-20
    • 1970-01-01
    • 2011-02-24
    • 2011-10-05
    • 1970-01-01
    • 2022-08-11
    • 2022-11-29
    相关资源
    最近更新 更多