C++循环每个非素数

C++ loop each non-prime

我正在尝试这样做:

  1. 用户选择一个号码
  2. 程序调用 isaPrime() 函数,因此我们可以查看数字是否为质数。

我想做一个循环,所以每次数字不是质数时,用户都必须选择一个新值。

代码如下:

#include <iostream>
#include <math.h>

using namespace std;

bool isPrime (int num)
{
    if (num <=1)
        return false;
    else if (num == 2)
        return true;
    else if (num % 2 == 0)
        return false;
    else
    {
        bool prime = true;
        int divisor = 3;
        double num_d = static_cast<double>(num);
        int upperLimit = static_cast<int>(sqrt(num_d) +1);

        while (divisor <= upperLimit)
        {
            if (num % divisor == 0)
                prime = false;
            divisor +=2;
        }
        return prime;
    }
}

int main()
{
    int p;
    do {
      cout << "p : ";
      cin >> p;
      isPrime(p);
    } while (isPrime(p));

}

这应该可以处理您的用户 I/O 循环。您只需将 isPrime 函数替换为您自己的实现即可。

代码清单


#include <iostream>
#include <iomanip>
#define isPrime(x) (1)

int main(void)
{
    using namespace std;

    const int maxchar = 5;
    string nationname;
    int input;
    int running = 1;

    while ( running )
    {
        cout << "Enter a number:";
        cin >> input;
        if ( isPrime(input ) )
        {
            // Do something
            running = 0;
        }
        else
        {
            cout << "Not a prime number. Please try again!" << endl;
        }
    }

    return 0;
}

如果您删除 do 循环,您的代码将正常工作。这是因为只要 isprime returns 为真,您的循环就会 运行,而当 isprime returns 为假时,您的循环将停止 运行ning。

此外,如果你想显示数字是否为质数,你应该使用 cout << isPrime(p);

因此您的主要功能应该如下所示

int main()
{
  int p;
  cout << "p : ";
  cin >> p;
  cout << isPrime(p);
}

根据你的问题:当用户选择一个非质数时,循环会迭代。你正在做的是相反的,所以只需替换

else{
bool prime =false   //replaced to true
//your code
while (divisor <= upperLimit)
    {
        if (num % divisor == 0)
            {
                prime = true;   //replaced to true 
                break;
            }
        divisor +=2;
    }
    return prime;