【问题标题】:How can I find the prime numbers?我怎样才能找到质数?
【发布时间】:2020-12-15 10:09:46
【问题描述】:

如何在 C++ 中以简单的方式找到一维数组中的素数??

{
         int list[5];
         int i,sum = 0;

           for (i = 0; i < 5; i++)
           {
            cout << "Enter The List [" << i << "]: "; cin >> list[i];
            sum = sum + list[i];
           }
                cout << endl;
                cout << "The Sum Is:" << sum << endl;

}

【问题讨论】:

  • 写一个函数来测试一个数是否是素数。然后遍历你的数组检查每个数字。
  • 不知道为什么你发布了一些代码来对数组中的数字求和。该代码对您没有帮助。

标签: c++ arrays visual-c++ primes


【解决方案1】:

强调@john 的评论:

创建一个函数(比如bool is_prime(int n))。 现在检查数字 n 是否是素数。

因此,您需要检查n 之前的每个大于1 的正整数是否除以n 或不留下任何余数。有一个更短的解决方法,这将大大降低计算成本。只需检查直到数字n 的平方根即可。因此使用了函数sqrt()。 所以现在,我们的is_prime() 函数很容易构建,如您所见:

bool is_prime(int n)
{
    int i,p=0;
    for(i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            p=1;
            break;    //even if one integer divides the number, then it is composite.
        }
    }
    if(p==1)
    return false;   //The number is a composite.
    else
    return true;    //The number is a prime.
}

现在,您只需将数组的每个值都传递给此函数,您的工作就完成了。

此外,如果您检查 1 的特殊情况,它既不是合数也不是素数,这个程序可以做得更好。一个建议是,检查您的数组元素是否为 1。如果不是,则在函数中传递该值,否则只打印它是 1

注意:sqrt() 函数在 C++ 中的 cmath 库中可用,因此您也需要将其包含在您的程序中。

【讨论】:

    【解决方案2】:

    您可以使用埃拉托色尼筛。简单来说,它的工作原理是(从 2 开始)遍历一个布尔数组,如果 arr[i] 是素数(为真,i 是给定的数字),则将每个多重性设置为假。

    从一个用 true 填充的数组开始

    Numbers   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
    is prime  1 1 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1
    

    首先你必须将 arr[0] 和 arr[1] 设置为 false,因为它们不是素数

    Numbers   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16  
    is prime  0 0 1 1 1 1 1 1 1 1 1  1  1  1  1  1  1
    

    现在,您转到 2 并将它的每个乘法设置为 false。 在这种情况下 4, 6, 8, 10, 12, 14 16...

    Numbers   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16   
    is prime  0 0 1 1 0 1 0 1 0 1 0  1  0  1  0  1  0
    

    然后做 3 次 所以 6、9、12、15

    Numbers   0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16   
    is prime  0 0 1 1 0 1 0 1 0 0 0  1  0  1  0  0  0
    

    4 不是素数,所以你跳过它

    5 是素数,所以你对 2 和 3 做同样的事情(10 -> 假,15 -> 假等)

    使用后,你可以简单地检查 n 是否为素数

    if (arr[n] == true)
        cout << n << " is prime";
    else
        cout << n << " is not prime";
    

    您可以在互联网上轻松找到它,例如here(您也可以添加一些优化)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多