素数公式 [英] Prime Number Formula

查看:73
本文介绍了素数公式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在C#中编写素数函数,并且想知道以下代码是否有效. 似乎"可以使用前50个左右的数字.我只是想确保无论数量多少,它都可以使用:

I am trying to write a prime number function in C# and I am wondering if the follow code will work. It "appears" to work with the first 50 numbers or so. I just want to make sure it will work no matter how big the number is:

static bool IsPrime(int number)
{
    if ((number == 2) || (number == 3) || (number == 5) || (number == 7) || (number == 9))
            return true;

    if ((number % 2 != 0) && (number % 3 != 0) && (number % 5 != 0) &&
        (number % 7 != 0) && (number % 9 != 0) && (number % 4 != 0) &&
        (number % 6 != 0))
        return true;

        return false;
 }

推荐答案

不行!例如,尝试使用121 = 11 * 11显然不是素数.

No it won't work! Try 121 = 11 * 11 for example which obviously isn't a prime.

对于赋予函数的任何数字,它是质数X1, X2, ..., Xn(其中 n> = 2 )的乘积,所有质数均大于或等于11,则您的函数将返回true. (而且,正如已经说过的,9不是素数.)

For any number given to your function, that is a product of the prime numbers X1, X2, ..., Xn(where n >= 2) with all of them being greater or equal to 11, your function will return true. (And also, as already said, 9 isn't a prime).

从Wikipedia中,您可以看到:

From wikipedia you can see that:

在数学中,素数(或素数)是一个自然数,它具有两个截然不同的自然数除数:1和它本身.

In mathematics, a prime number (or a prime) is a natural number that has exactly two distinct natural number divisors: 1 and itself.

因此,一种非常简单且幼稚的用于检查数字是否为质数的算法可能是:

so a very simple and naive algorithm on checking whether a number is prime could be:

public bool CalcIsPrime(int number) {

    if (number == 1) return false;
    if (number == 2) return true;

    if (number % 2 == 0) return false; // Even number     

    for (int i = 2; i < number; i++) { // Advance from two to include correct calculation for '4'
       if (number % i == 0) return false;
    }

    return true;

}

有关更好的算法,请点击此处: Primality Test

For better algorithms check here: Primality Test

如果要检查代码,请执行测试,以下是用

If you want to check your code, do inlcude a test, here's a test case written in xunit.

        [Theory]
        [MemberData(nameof(PrimeNumberTestData))]
        public void CalcIsPrimeTest(int number, bool expected) {
            Assert.Equal(expected, CalcIsPrime(number));
        }

        public static IEnumerable<object[]> PrimeNumberTestData() {
            yield return new object[] { 0, false };
            yield return new object[] { 1, false };
            yield return new object[] { 2, true };
            yield return new object[] { 3, true };
            yield return new object[] { 4, false };
            yield return new object[] { 5, true };
            yield return new object[] { 6, false };
            yield return new object[] { 7, true };
            yield return new object[] { 8, false };
            yield return new object[] { 9, false };
            yield return new object[] { 10, false };
            yield return new object[] { 11, true };
            yield return new object[] { 23, true };
            yield return new object[] { 31, true };
            yield return new object[] { 571, true };
            yield return new object[] { 853, true };
            yield return new object[] { 854, false };
            yield return new object[] { 997, true };
            yield return new object[] { 999, false };
        }

这篇关于素数公式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆