首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查数字是否为素数

检查数字是否为素数
EN

Stack Overflow用户
提问于 2015-05-06 22:23:59
回答 6查看 2.9K关注 0票数 2

我想写一个程序,接受一些输入数字,然后检查它们是否是素数。我是这样写的:

代码语言:javascript
复制
#include <iostream>

using namespace std;

bool isPrime (int number)
{
    for (int i=2; i<number; i++) 
    {
       if(number % i == 0)
           return false;
       else
           return true;
    }
}

int main()
{
    int y;
    bool z;

    cout << "Enter a positive integer: ";
    cin >> y;

    z = isPrime (y);

    if(z==true)
        cout <<"number is prime" << endl;
    else 
        cout << "number is not prime" << endl;

    system("PAUSE");

    return 0;
}

正如您所看到的,我想使用函数和for循环。但这段代码只有一个号码。我想循环整个输入过程。我怎么能做到呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-05-06 22:31:48

只需在整个main内容周围设置一个循环:

代码语言:javascript
复制
int main()
{

    while (true)
    {
        int y;
        bool z;
        cout<<"Enter a positive integer: ";
        cin>>y;
        z= isPrime (y);
        if(z==true)
            cout <<"number is prime" << endl;
        else 
            cout << "number is not prime" << endl;
    }

    system("PAUSE");
    return 0;

}
票数 0
EN

Stack Overflow用户

发布于 2015-05-06 22:30:20

想想这能做些什么:

代码语言:javascript
复制
for (int i=2; i<number; i++) 
{
   if(number % i == 0)
       return false;
   else
       return true;
}

假设i为3或更高。然后在第一次迭代中,它检查number是否可以被2整除。如果是,那么它不是素数,因此返回false。但是如果它是不可除的,那么函数返回true (意思是number应该是素数) --即使它不应该(例如,9,它不能被2整除,也不能被素数整除)。

解决方案是,只有在知道数字不能除数(即,在true循环完成后)时才返回for

代码语言:javascript
复制
for (int i=2; i<number; i++) 
{
   if(number % i == 0)
       return false;
}
return true;

至于输入循环,您可以将程序的输入/输出部分放在while循环中:

代码语言:javascript
复制
while(true) {
  cout << "Enter a positive integer: ";
  cin >> y;

  z = isPrime (y);

  if(z==true)
    cout <<"number is prime" << endl;
  else 
    cout << "number is not prime" << endl;
}

然后它将继续读取一个数字,检查它是否为素数,并在一个循环中打印结果。您可以进行检查(例如,“如果数字小于0(即无效)退出循环”)

票数 3
EN

Stack Overflow用户

发布于 2015-05-06 22:32:35

非常简单:只需将想要重复的部分包装在一个循环中:

int main() {

代码语言:javascript
复制
int y;
bool z;
while (true) {
    cout<<"Enter a positive integer: ";
    cin>>y;
    z= isPrime (y);
    if(z==true)
        cout <<"number is prime" << endl;
    else 
        cout << "number is not prime" << endl;
    system("PAUSE");
    }

}

这个程序永远不会停止。在C++中,只要x为真,while(x)就会反复运行代码块。在本例中,x只是true,所以它永远运行代码。

值得注意的是:我看到您在else语句之后缩进了三行代码,但没有使用大括号。在C++中,如果不使用大括号,则ifelsewhilefor等只在一行上工作。要使它们在多行上工作,请使用以下花括号:

代码语言:javascript
复制
if(z==true) {
    cout <<"number is prime" << endl;
}
else {
    cout << "number is not prime" << endl;
    system("PAUSE");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30088741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档