PAT B1013 数素数

输入样例:

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; }
原文地址:https://www.cnblogs.com/syq816/p/12584819.html