【问题标题】:Count Primnumbers in Vector计算向量中的 Primnumbers
【发布时间】:2014-01-27 21:55:46
【问题描述】:

如何计算一个向量中有多少个素数?

我的向量 numbers_ 包含 10 个整数。其中 2 个是素数。

所以 counter 应该在函数结束时返回 2。但在这种情况下,计数器返回 6。

我卡在哪里了?

谢谢你们。

这是我目前的代码:

int numberClass::countPrims()
{
    int counter = 0;

    for(int i = 0; i<numbers_.size();i++)
    {
        bool prime = true;

        if(numbers_.at(i)%2 == 0)
        {
            prime = false;
        }
        if(prime)
        {
            counter++;                   
        }
    }
    return counter;
}

【问题讨论】:

  • “Prime”与“odd”的含义不同。 (Prime number 如果您需要找出答案。)编写一个函数来检查某物是否为质数,然后使用它进行计数。
  • 你的函数只计算奇数。例如,9 不是质数,但9 % 2 给出了1,所以prime 将保持true 并被计算在内。
  • 我建议先从 IsPrime( int number ); 函数开始。完成这项工作,剩下的就很容易了。更好的是:使用std::count_if
  • @minitech 没有初等数学知识,尝试编程。这不可怕吗?
  • 使用这些数字作为测试用例:15 {3 * 5}、21 {7*3}、25 {5 * 5}。这些数字是奇数,但不是素数。在网上搜索“素数筛”

标签: c++ vector primes


【解决方案1】:

很明显,判断一个数是否为素数的代码是无效的。我建议编写一个单独的函数来确定给定数字是否为素数,对其进行测试并在您的课程中使用它。

至于你的代码

 for(int i = 0; i<numbers_.size();i++)
{
     bool prime = true;

    if(numbers_.at(i)%2 == 0)
    {
        prime = false;
    }
     if(prime)
     {
         counter++;                   
     }
}

当一个数不能被 2 整除时,计数器就会增加。但是非质数也不能被 2 整除。 在您的代码中,您只需计算向量中奇数值的数量。

顺便说一句,2是质数。:)

【讨论】:

    【解决方案2】:

    我听从了你们的建议,首先实现了一个 bool 函数来测试数字是否为素数。

    bool prime(int number) {
    if (number < 2)
    {
            return false;
    }
    
    for (int i = 2; i < (number / 2 + 1); i++)
    {
        if (number%i == 0)
        {
            return false;
        }
    }
    return true;
    }
    

    现在可以了,谢谢。

    【讨论】:

    • 使用for (int i = 2; i*i &lt;= (number); i++) 代替... n/2...
    猜你喜欢
    • 2014-02-27
    • 2012-10-28
    • 2015-08-09
    • 2017-11-08
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多