所以我为3到200之间的数字做了一个简单的素数查找器。它必须使用一个布尔变量,只需要fyi。没有错误发生。输出是:
3到200之间的素数是:
3
5
7
为什么不继续?我一次又一次地在纸上画出来,找不到我的逻辑错误。
另外;我是手工写的,因为我不知道如何获取文件的内容。它存在于我没有root访问权限的远程主机上。有没有更好的方法来复制文件?
#include <iostream>
using namespace std;
int main()
{
int count=0;
cout<<"The prime numbers between 3 and 200 are: "<<endl;
for (int i=3;i<=200;i++)
{
for (int j=2;j<i;j++)
{
bool ptest=i%j;
if (!ptest)
{
break;
}
else if (ptest)
{
count=count+1;
if (count==(i-2))
cout<<i<<endl;
}
}
}
}
答案 0 :(得分:1)
在count
循环中使用后,您忘记将0
设置回j
。移动线:
int count = 0;
位于第一个for
循环内。然后你的程序正常工作(虽然msw指出,它不是最有效的技术!)
答案 1 :(得分:0)
需要考虑的一些事项:
您不需要考虑代码中的任何偶数。
您的代码中存在一些逻辑错误。在第二个count
循环后需要检查for
的值。在第二个count
循环开始之前,需要重置for
。
您可以在内循环中找到数字不是素数后立即停止,而不是继续。您只需使用标记isPrime
而不是计数。
以下是适用于我的代码版本:
#include <iostream>
using namespace std;
int main()
{
cout << "The prime numbers between 3 and 200 are: " <<endl;
for (int i=3; i <= 200; i += 2) {
bool isPrime = true;
for (int j=3; j < i; j += 2) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime)
{
cout << i << endl;
}
}
}
答案 2 :(得分:0)
你不必循环直到j到达i,而你可以检查是否 j < sqrt(i)
,即。写入第二个for循环: for (int j=3; j*j<=i; j+=2)