我正在编写一个程序,用来判断一个数字是否为质数。编译时我没有得到任何错误,但是输出是不正确的。谁能告诉我哪里出了问题(以及如何修复?)
#define PROMPT "Please enter a whole number: "
#define NOT_PRIME "The number is not a prime number! "
#define PRIME "The number is a prime number "
#define DONE 0
#define FIRST_FACTOR 3
using std::cout;
using std::cin;
int main(){
int i;
char number;
cout << PROMPT;
cin >> number;
for (i=FIRST_FACTOR; i<=number; i++){
prime = true;
for (int n=2; n<=i-1; n++){
if (i%n == 0){
prime = false;
}
}
if(prime){
cout << number << PRIME << endl;
}
else{
cout << number << NOT_PRIME << endl;
}
}
return 0;
}发布于 2013-01-31 03:19:04
最大的问题是你的程序总是在应该打印i的时候打印number。
if(prime){
cout << i << PRIME << endl;
}
else{
cout << i << NOT_PRIME << endl;
}另一个问题是您将number声明为char而不是int。
除此之外,您的程序正在工作(link to ideone),但不是最优的。
要使其最优,请考虑以下更改(按挑战递增的顺序):
i+1不是素数,并将i递增2。当达到候选值的平方根时,,而不是for循环中的素数列表;而不是测试从2到<2>d19的所有可能的因子,只测试您已经切换到代码的素数
发布于 2013-01-31 03:25:58
您的问题是:
以下是我认为解决方案应该是什么样子:
#include <iostream>
int main() {
std::cout << "Please enter a whole number: " << std::endl;
unsigned int number;
std::cin >> number;
for (unsigned int i = 2; i * i < number; i++) {
if(number%i == 0) {
std::cout << "The number is not a prime number! " << std::endl;
return 0;
}
}
std::cout << "The number is a prime number " << std::endl;
return 0;
}发布于 2013-01-31 03:18:44
我不知道为什么要在代码中循环两次,您可以将其更改为如下所示
if (number % 2 == 0) prime = false;
for (i = 3; i <= sqrt(number) && prime; i+=2)
if (number % i == 0) prime = false;认识到一个数字的最高除数(可以将它平均除以)等于它的平方根,所以你不需要检查更多。
https://stackoverflow.com/questions/14611904
复制相似问题