我试图在本节找到一个质数

I'm trying to find a prime number at this section

本文关键字:一个      更新时间:2023-10-16

要求用户输入一个从 1 到 a 的数字,然后如果用户输入 1 作为整数 c。我应该找到 1 到 a 之间的每个素数。这编译得很好,但它打印了 1 和 a 之间的每个数字。

if (c == 0) {
for (int i = 1; i <= a; i++) {
cout << i << " ";
}
}
else {
for (int i = 2; i <= a; i++) {
for (int c = 1; c <= a; c++) {
if (i % c == 0) {
cout << i << " ";
}
}
}
}

它打印 1 到 a 之间的每个数字。

for (int i = 2; i <= a; i++) {
for (int c = 1; c <= a; c++) {
if (i % c == 0) {
cout << i << " ";
}
}
}

c的第一个值为 1,对于所有非空数,i % 1为 0,因此您至少打印一次从 2 到 a 的所有数字

在第二个循环中,c也会值i,所以你做i % i当然模数又是 0,你至少第二次打印从 2 到 a 的所有数字

当然,在其他情况下,模数可以是 0

要求用户输入一个从 1 到 a 的数字,然后如果用户将 1 作为整数 c

我不明白那句话,有些东西有问题或缺失

我应该找到 1 到 a 之间的每个素数

这不是你所做的,你必须检查所有的模数都不是0,除了1和数字本身

可以是(懒惰的方式):

#include <iostream>
int main()
{
std::cout << "enter max number" << std::endl;
int a;
if (!(std::cin >> a) || (a < 1)) // even we know 1 is not a prime number
std::cerr << "invalid number" << std::endl;
else {
for (int i = 2; i <= a; ++i) {
int c;
for (c = i/2; c >= 2; --c) {
if (i % c == 0)
break;
}
if (c == 1)
// prime 
std::cout << i << " is a prime number" << std::endl;
}
}
return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra m.cc
pi@raspberrypi:/tmp $ ./a.out
enter max number
25
2 is a prime number
3 is a prime number
5 is a prime number
7 is a prime number
11 is a prime number
13 is a prime number
17 is a prime number
19 is a prime number
23 is a prime number