P 表示第 i 个素数。现任给两个正整数 MN≤10,请输出 PP 的所有素数。

输入格式:

输入在一行中给出 MN,其间以空格分隔。

输出格式:

输出从 PP 的所有素数,每 10 个数字占 1 行,其间以空格分隔,但行末不得有多余空格。

输入样例:

  1. 5 27

输出样例:

  1. 11 13 17 19 23 29 31 37 41 43
  2. 47 53 59 61 67 71 73 79 83 89
  3. 97 101 103

思路

我的方法是读取一个数处理一个数。

如果这个数是素数,则素数计数器counter++

counter达到题目要求的区间时,就输出元素。

注意每10个输出要换一行,我用nextLine变量来记录输出了几个素数。


代码

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int isPrime(int n) {
  5. if(n <= 1) return 0;
  6. for(unsigned i = 2; i * i <= n; i++) {
  7. if(n % i == 0) return 0;
  8. }
  9. return 1;
  10. }
  11. int main() {
  12. int start = 0, end = 0;
  13. cin >> start >> end;
  14. int counter = 0, nextLine = 0;
  15. for(int i = 2; counter != end; i++) {
  16. if( isPrime(i) ) counter++;
  17. else continue;
  18. if(counter > end) break;
  19. if( counter >= start && counter <= end ) {
  20. nextLine++;
  21. printf("%d", i);
  22. if(nextLine % 10 != 0 && counter != end) printf(" ");
  23. else printf("\n");
  24. }
  25. }
  26. return 0;
  27. }