我想写一个程序,它接受一些输入数字,然后检查它们是否是素数。 我这样写了:
#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循环。 但是这段代码只有一个数字。我想循环整个输入过程。我该怎么做?
答案 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 ++中,如果你不使用大括号,if
,else
,while
,for
等等只能在一行上工作 。要使它们在多行上工作,请使用如下的花括号:
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;
}