C++ 调试主程序

C++ 调试主程序,c++,primes,C++,Primes,我正在做一个程序,确定一个数是否为素数。编译时我没有收到任何错误,但输出不正确。谁能告诉我哪里出了问题(以及如何修复它?) #定义提示“请输入整数:” #定义非素数“数字不是素数!” #定义素数“数字是素数” #定义完成0 #定义第一个系数3 使用std::cout; 使用std::cin; int main(){ int i; 字符数; 数量; 对于(i=FIRST_FACTOR;i我不确定为什么在代码中循环两次,您可以将其更改为 if (number % 2 == 0) prime = fa

我正在做一个程序,确定一个数是否为素数。编译时我没有收到任何错误,但输出不正确。谁能告诉我哪里出了问题(以及如何修复它?)

#定义提示“请输入整数:”
#定义非素数“数字不是素数!”
#定义素数“数字是素数”
#定义完成0
#定义第一个系数3
使用std::cout;
使用std::cin;
int main(){
int i;
字符数;
数量;

对于(i=FIRST_FACTOR;i我不确定为什么在代码中循环两次,您可以将其更改为

if (number % 2 == 0) prime = false;

for (i = 3; i <= sqrt(number) && prime; i+=2)
    if (number % i == 0) prime = false;
if(数字%2==0)prime=false;

对于(i=3;i我不确定为什么在代码中循环两次,您可以将其更改为

if (number % 2 == 0) prime = false;

for (i = 3; i <= sqrt(number) && prime; i+=2)
    if (number % i == 0) prime = false;
if(数字%2==0)prime=false;

对于(i=3;i而言,最大的问题是程序在应该打印
i
时总是打印
number

    if(prime){
       cout << i <<  PRIME << endl;
    }
    else{
       cout << i <<  NOT_PRIME << endl;
    }
if(prime){

cout最大的问题是,当程序应该打印
i
时,它总是打印
number

    if(prime){
       cout << i <<  PRIME << endl;
    }
    else{
       cout << i <<  NOT_PRIME << endl;
    }
if(prime){
您的问题是:

  • 数字应为整数或无符号整数
  • 第二个for循环没有意义
  • 您的控制流非常复杂,请简化
我认为解决方案应该是这样的:

#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;
}
#包括
int main(){
std::cout数;
for(无符号整数i=2;i*i
  • 数字应为整数或无符号整数
  • 第二个for循环没有意义
  • 您的控制流非常复杂,请简化
我认为解决方案应该是这样的:

#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;
}
#包括
int main(){
std::cout数;
for(无符号整数i=2;i*istd::cout我假设您应该循环两次,以便继续请求新条目,直到它们输入0为止

#define PROMPT "Please enter a whole number: "
#define NOT_PRIME " is not a prime number! "
#define PRIME " is a prime number "

using std::cout;
using std::cin;

int main(){

   int number;
   bool prime;

   while (true)
   {
      prime = false;

      cout << PROMPT;
      cin >> number;

      if (number == 0) break;

      int MaxPossibleFactor = (int)(sqrt(number) + 1);

      if ((number % 2) == 0)
      {
         prime = true;
      }
      else
      {
         for (int i=3; i<=MaxPossibleFactor; i += 2)
         {
            if ((number % i) == 0)
            {
               prime = true;
               break;
            }
         }
      }

      if (prime)
      {
         cout << number << PRIME << endl;
      }
      else
      {
         cout << number << NOT_PRIME << endl;
      }
   }


   return 0;
}
#定义提示“请输入整数:”
#定义非素数“不是素数!”
#定义素数“是一个素数”
使用std::cout;
使用std::cin;
int main(){
整数;
布尔素数;
while(true)
{
素数=假;
数量;
如果(数字==0)中断;
int MaxPossibleFactor=(int)(sqrt(数字)+1);
如果((数字%2)=0)
{
prime=true;
}
其他的
{

对于(inti=3;i我假设您应该循环两次,以便继续请求新条目,直到它们输入0为止

#define PROMPT "Please enter a whole number: "
#define NOT_PRIME " is not a prime number! "
#define PRIME " is a prime number "

using std::cout;
using std::cin;

int main(){

   int number;
   bool prime;

   while (true)
   {
      prime = false;

      cout << PROMPT;
      cin >> number;

      if (number == 0) break;

      int MaxPossibleFactor = (int)(sqrt(number) + 1);

      if ((number % 2) == 0)
      {
         prime = true;
      }
      else
      {
         for (int i=3; i<=MaxPossibleFactor; i += 2)
         {
            if ((number % i) == 0)
            {
               prime = true;
               break;
            }
         }
      }

      if (prime)
      {
         cout << number << PRIME << endl;
      }
      else
      {
         cout << number << NOT_PRIME << endl;
      }
   }


   return 0;
}
#定义提示“请输入整数:”
#定义非素数“不是素数!”
#定义素数“是一个素数”
使用std::cout;
使用std::cin;
int main(){
整数;
布尔素数;
while(true)
{
素数=假;
数量;
如果(数字==0)中断;
int MaxPossibleFactor=(int)(sqrt(数字)+1);
如果((数字%2)=0)
{
prime=true;
}
其他的
{

对于(int i=3;i你的算法没有意义。外循环是干什么的?你不应该检查
number%n
?数字应该是
int
而不是
char
。你应该更喜欢
const std::string
const int
等。你的算法没有意义。你的外循环是什么oop for?您不应该检查
number%n
?数字应该是
int
而不是
char
。您应该更喜欢
const std::string
const int
等。我认为程序应该检查
number
是否为素数,因此输出在该上下文中是有意义的。t但是,
i
上的外循环对我来说似乎很奇怪和错误。@CarlNorum看起来该程序需要遍历从3到
number
的数字,并打印哪些是素数,哪些不是。是的,算法看起来就是这样做的,但这与提示和OP的第一个d不匹配描述:“…这个程序确定一个数是否为素数。”我认为程序应该检查
number
是否为素数,因此输出在该上下文中是有意义的。
I
上的外部循环对我来说似乎很奇怪和错误。@CarlNorum看起来程序应该检查从3到
number
的数字,并打印哪些是素数,哪些是素数不是。是的,算法看起来就是这样做的,但这与提示和OP的第一个描述不匹配:“……这个程序确定一个数字是否为素数。”