检查数字是否为素数

时间:2015-05-06 22:24:00

标签: c++

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

#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循环。 但是这段代码只有一个数字。我想循环整个输入过程。我该怎么做?

6 个答案:

答案 0 :(得分:3)

想想这是做什么的:

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

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

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

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;
}

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

答案 1 :(得分:0)

只需围绕整个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; } 内容循环:

Dim SourceLink As String
SourceLink = New System.Net.WebClient().DownloadString(TxtLink.Text)
TxtDescripcion.Text = SourceLink

答案 2 :(得分:0)

非常简单:只需在循环中包裹您想要重复的部分:

int main() {

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 ++中,只要while(x)为真,x就会重复运行一段代码。在这种情况下,x只是true,因此它会永远运行代码。

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

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

答案 3 :(得分:0)

关于简单地循环输入的其他答案是正确的。我还强烈建议检查一些众所周知的算法来检查素数。对于初学者,我建议您查看Eratosthenes的Sieve

http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

否则,当有人选择输入非常大的数字时,您会遇到性能问题。

答案 4 :(得分:0)

删除函数中的else子句,并将return true;移到for循环之外。目前,只要您的函数找到一个数字,您的数字可被整除,它就会返回true。因此,如果您的数字是9,那么您的函数会很快发现它不能被2整除并返回true,尽管9不是素数。

return true;移动到for循环之后会使您的程序循环遍历所有小于您输入数字的数字,直到找到一个数字可以被整除的数字为止by,在这种情况下,你的函数将返回false,或者达到你的数字,在这种情况下,执行离开for循环,函数返回true

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

答案 5 :(得分:0)

我发现了这个article,效率更高 通过使用sqrt确定数字是否为素数 而不是从2循环到N-1。

int isPrime(int n)
{
    int i;

    if (n==2)
        return 1;

    if (n%2==0)
        return 0;

    for (i=3;i<=sqrt(n);i+=2)
        if (n%i==0)
            return 0;

    return 1;
}