我正在尝试在此部分找到素数

时间:2019-04-16 08:48:22

标签: c++

要求用户输入一个从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 个答案:

答案 0 :(得分:0)

  

它打印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之间的每个素数

这不是您要做的,您必须检查所有模是否为 not 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