【问题标题】:How does one implement IsPrime() function [duplicate]如何实现 IsPrime() 函数[重复]
【发布时间】:2011-02-26 02:03:51
【问题描述】:

可能的重复:
Program to find prime numbers in C#
prime numbers c#
Most elegant way to generate prime numbers

大家好。

如何判断一个数是否为素数?

【问题讨论】:

  • 在我的鼎盛时期,它相当大......
  • @Randolpho:您的评论可能与“在 C# 中查找素数的程序可能重复 – Thorarin”
  • 我认为应该有一个专用的超级计算机)服务器,它带有一个巨大的哈希表,它接收远程请求,例如“prime?1234567891011”,并以“1234567891011 is prime”响应(高级别)。 , "1234567891011 不是素数。", "1234567891011 太大。", "1234567891011 尚未被分解。", "错误的数字格式"。
  • @Hamish Grubijan:那将是一个很棒的网络应用程序
  • (续)我想这样的服务器甚至可以利用文件系统(提供更多号码)并在目录中组织文件以便更快地查找,同时还将最流行的值放在内存中。但是,最大的性能可能来自过滤数字范围。

标签: c#


【解决方案1】:

这是我在需要进行检查时用来写的:

inline bool isPrime(const int a)
{
    if(a == 1) return false;
    if(a == 2 || a == 3) return true;
    if(!(a & 1)) return false;
    if(!((a + 1)%6 || (a-1)%6)) return false;
    int q = sqrt((long double)a) + 1;
    for(int v = 3; v < q; v += 2)
        if(a % v == 0)
            return false;
    return true;
}

由于一些有用的修剪,它工作得非常好。

【讨论】:

    【解决方案2】:

    不知道它是否有标准函数,但您总是可以使用埃拉托色尼筛法构建一个方法(链接:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)。很容易实现。

    【讨论】:

    • 埃拉托色尼筛用于创建素数的列表,而不是检查素数。
    • 是的,但是素数筛可以在几百毫秒内(在单个线程中,在现代硬件上)计算每个素数最多 10 亿个,所以我认为值得一提的是合理的小数字。我通常使用筛子(在启动时在单独的线程中启动它,并在结果可用时使用)和相对快速的 Miller-Rabin 测试来实现 isPrime。筛子还可以让我询问第 N 个素数(如果有的话)。
    【解决方案3】:

    这里有几个 c# 版本:LTD Puzzle 4:Finding Prime Numbers 还有f#、c、JavaScript。 PHP等版本

    【讨论】:

      【解决方案4】:

      如果它可以被 1 或它自己整除,则它是素数。您可以通过意识到除 2 之外的所有素数都是奇数,或者可以被 2 整除来缩短测试次数。此外,所有大于 5 的素数都可以表示为 6n+1 或 6n-1,但并非所有数字都会生成这个方式是素数。此外,该数字的最大可能除数将是其平方根。这些事实足以使测试比只测试所有数字直到要检查的数字快得多。

      【讨论】:

      • 我认为 Eratosthenes 的筛子很优雅,性能也很好
      • 是的,但是对于一些问题,比如欧拉项目中的“查找第 10001 个素数”,我选择测试每个可能的素数,因为我不知道第 10001 个素数会有多大。如果我知道这一点,筛子可能会更快。
      • 大卫,对于这些问题,实际上有一种更快的方法。素性测试会让您很快陷入计算问题。
      • 我看过一些数学家命名的方法,但对于我不太精通数学的头脑来说,它们太难理解了。
      猜你喜欢
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2012-03-13
      • 2014-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多