C++循环每个非素数
C++ loop each non-prime
我正在尝试这样做:
- 用户选择一个号码
- 程序调用
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;
我正在尝试这样做:
- 用户选择一个号码
- 程序调用
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;