需要帮助修复素数程序

时间:2014-09-23 17:35:49

标签: c++

我是C ++的新手,我正在尝试制作一个列出素数的控制台程序。我在获得预期结果时遇到问题,因为它在显示后停止

2 is a prime number

这是错误的,列表不完整。请查看我的代码并帮我解决。

#include<iostream>
using namespace std;

int main()
{
    int num,divi,count=0;

    for(num=0;num<10;num++)
    {   
        for(divi=1;divi<=num;divi++)
        {

            if(num%divi==0)
            {
                count++;
            }
            if(count==2){
                 cout<<num<<"is a prime number"<<endl;
            }

        }
    }

}

3 个答案:

答案 0 :(得分:2)

每次检查新号码时都必须初始化计数。并且第二个if语句必须放在内部循环之外。 例如

for(num=0;num<10;num++)
{
    count = 0;   
    for(divi=1;divi<=num;divi++)
    {

        if(num%divi==0){count++;}
    }

    if(count==2){cout<<num<<"is a prime number"<<endl;}

}

考虑到2是素数。

在不使用它们的声明性区域中声明变量也不是一个好主意。我会编写像

这样的程序
#include <iostream>

int main() 
{
    const int N = 10;

    for ( int num = 0; num < N; num++ )
    {
        int count = 0;

        for ( int div = 1; div <= num; div++ )
        {
            count += num % div == 0;
        }

        if ( count == 2 ) std::cout << num << " is a prime number" << std::endl;
    }

    return 0;
}

或者代替

count += num % div == 0;

你可以像在原始程序中那样写作

if ( num % div == 0 ) ++count;

答案 1 :(得分:0)

您需要在外部for循环的每次迭代开始时将count重置为0。你也可以在那里开始计算。

答案 2 :(得分:0)

第一次检查后您无法重置count,因此当您检查数字3时,它会从2开始

您应该每次迭代重置计数:

for(num=0;num<10;num++)
{  
    count = 0;
    ... // Rest of the code here
}