输入样例:
5 27
输出样例:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
解题思路:
从2开始查找,如果查找的数的个数在n到m之间就输出,并且需要一个计数器来计算输出数的个数,如果个数是10的整数倍,就输出换行。
#include<iostream> #include<cmath> using namespace std; bool IsPrime(int n) { if (n <= 3) { return n > 1; } // 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型 int k = (int)sqrt((double)n); int i; for (i = 2; i <= k; i++) { if (n % i == 0) { return false; } } // 如果完成所有循环,那么m为素数 return true; } int main() { int n, m;//开始数和结束的数 cin >> n >> m;
int count = 0;//用于计算素数的个数 int flag = 0;//计数器,用于判断输出数的个数 for (int i = 2;;i++) { if (IsPrime(i)) { //如果当前数是质数 count++;
if (count >= n&&count <= m) { //如果质数的个数在范围内就输出 flag++; if (count == m) { //最后一个数据,不输出空格 printf("%d", i); break; } if (flag % 10 == 0) { //10个数字为一行 printf("%d ", i); } else { printf("%d ", i); } } else if (count > m) { break; } } } system("pause"); return 0; }