我正在开发一个程序,我必须在1到239之间打印出素数,包括1和239(我知道一个或两个可能不是素数,但我们会考虑它们这个程序)它必须是一个非常简单的程序,因为我们只考虑了一些基础知识。到目前为止,我的代码就是这样,这对我来说似乎是不错的逻辑流程,但不会产生输出。
#include <iostream>
using namespace std;
int main()
{
int x;
int n = 1;
int y = 1;
int i = 0;
while (n<=239)
{x = n % y;
if (x = 0)
i++;
if (y < n)
y++;
n++;
while (i == 2)
cout << n;
}
return 0;
}
我想要这个工作的方法是取n,只要n是239或更小,并且预成型模数除以从1到n的每个数字。每当数字y均匀地进入n时,计数器将增加1.如果计数器等于2,则数字为素数,我们将其打印到屏幕。任何帮助都会非常感激。谢谢
答案 0 :(得分:0)
让我们从常见错误开始:
首先,您想要使用cin
从用户那里获取输入cin>>n; // write it before starting your while loop
然后,
if (x = 0)
应该是:
if (x == 0)
将您的第二个while循环更改为:
while (i == 2){
cout << n;
i++;
}
答案 1 :(得分:0)
std::cout << std::to_string(2) << std::endl;
for (unsigned int i = 3; i<240; i += 2) {
unsigned int j = 3;
int sq = sqrt(i);
for (; j <= sq; j += 2) if (!(i%j)) break;
if (j>sq) std::cout << std::to_string(i) << std::endl;
}
首先,主要定义:素数(或素数)是一个大于1的自然数,除了1和它本身之外没有正除数。
所以你可以跳过所有偶数(因此... i + = 2)。 此外,没有必要尝试除以大于sqrt(i)的数字,因为它将具有小于sqrt(i)的除数,并且代码找到并移动到下一个数字。 仅考虑奇数,意味着我们可以跳过偶数作为除数(因此...... j + = 2)。
在您的代码中有明显的初学者错误,例如(x = 0)而不是x == 0。而且逻辑也没有说服力。我同意@NathanOliver,您需要学习使用调试器来查找所有错误。其余的,祝你好运。