【问题标题】:How to check if a number is prime in C++C++中如何判断一个数是否为素数
【发布时间】:2015-02-08 02:02:41
【问题描述】:

对我来说,这段代码看起来是正确的,但是当我运行它时,它给我的所有输出都是“2”。我已经尝试过多次查看,但每次我都没有发现任何问题。所以我想知道是否有人不介意查看以下代码以让我知道我做错了什么。

#include <iostream>

using namespace std;

bool oddOrEven(int x)
{
    int divisor = 2; // initial divisor check
    bool boolCheck = true; // initial boolean value set to true, later to check

    for(int i = x-1; i >= 2;i--)
    {
        if(i%divisor == 0)
            boolCheck = false;
    }

    return boolCheck; // returning whether or not the number is prime
}


int main()
{
    int num1 = 0;

    cout << "Please enter how many numbers you want to check: " << endl;
    cin >> num1;

    cout << "Prime numbers from 2-" << num1 << endl;

    for(int i=num1; i >= 2; i--)
    {
        if(oddOrEven(i))
            cout << i << endl;
    }
}

任何帮助将不胜感激,我觉得这可能与我的布尔检查有关,但我不是 100% 什么。

编辑:在发布之前我意识到我没有增加除数,所以我尝试了它,但它仍然不正确。我改变的只是:

for(int i = x-1; i >= 2;i--)
{
    if(i%divisor == 0)
        boolCheck = false;
    divisor = divisor + 1;
}

所以我仍然卡住了,再次感谢任何帮助。

【问题讨论】:

  • 我很困惑。 "oddOrEven" == 所有数字的集合。
  • 我对你的意思感到困惑,哈哈。你的意思是当我使用oddOrEven(i) 时?
  • 我的意思是oddOrEven(x) 似乎表明isOdd(x) || isEven(x) 始终是true
  • 另外你只需要检查到sqrt(n),而不是n
  • 是的,我知道 sqrt(n) 的东西,但我不知道我是否可以这样写。或者,如果我需要另一个库,例如 #include 或其他东西

标签: c++ loops boolean primes


【解决方案1】:

您正在划分错误的数字。改变这一行

if(i%divisor == 0)

if (x % i == 0)

话虽如此,您可能知道您的算法远非最优。至少您可以立即return false 而不是设置标志。您最多可以检查除数到x 的平方根。您只能检查奇数除数。 And so on.

【讨论】:

  • 哇...我觉得自己很愚蠢,所以解决了它。非常感谢
  • @BpVx 您可以只返回 false 而不是将 boolCheck 设置为 false 它将停止不需要的循环。只是说:)
猜你喜欢
  • 2010-12-05
  • 2017-03-05
  • 2020-02-14
  • 2011-05-24
  • 2016-01-25
  • 2013-11-05
  • 2016-02-10
相关资源
最近更新 更多