【问题标题】:Issue with my loop finding primes我的循环寻找素数的问题
【发布时间】:2015-02-09 18:19:04
【问题描述】:

我需要输出来读取数字,然后该数字是否为素数。由于某种原因,当它达到 11 时,它不会输出它是素数而只是打印 11 12 这个数不是质数。

我知道我的 while 循环存在逻辑问题,但我无法弄清楚。任何帮助表示赞赏。

int main()
{
    bool isPrime = true;

    int sqrtNum;
    int divisor = 3;

    for(int i = 0; i < 100; i++)
    {
        cout << i << "\t";


        if (i == 0 || i == 1)
            cout << "That number is not prime." << endl;
        else if (i == 2)
            cout << "That number is prime." << endl;
        else if (i % 2 == 0)
            cout << "That number is not prime." << endl;
        else
        {
            sqrtNum = static_cast<int> (sqrt(static_cast<double>(i)));

            while (divisor <= sqrtNum)
            {
                if (i % divisor == 0)
                {
                    cout << "That number is not prime." << endl;
                    isPrime = false;
                    break;
                }
                else
                {
                    divisor = divisor + 2;
                }
            }
            if (isPrime)
            {
                cout << "That number is prime" << endl;
            }
        }

    }
    system("pause");
    retu

【问题讨论】:

  • 你是在调试器下运行的吗?
  • 你忘记在每次循环中重置 isPrime
  • 你也忘了在循环中重置divisor
  • 你练习仔细阅读你的代码。这些都是通过快速检查发现的简单问题。

标签: c++ loops primes


【解决方案1】:

从 cmets 中可以清楚地看出,您忘记在循环中重置 isPrimedivisor 的值。为了避免此类错误,最好只在使用它们的范围内定义此类变量。

int main()
{
    for(int i = 0; i < 100; i++)
    {
        cout << i << "\t";


        if (i == 0 || i == 1)
            cout << "That number is not prime." << endl;
        else if (i == 2)
            cout << "That number is prime." << endl;
        else if (i % 2 == 0)
            cout << "That number is not prime." << endl;
        else
        {
            bool isPrime = true;
            int divisor = 3;
            int sqrtNum = static_cast<int> (sqrt(static_cast<double>(i)));

【讨论】:

    猜你喜欢
    • 2013-05-07
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多