首页 > 其他 > 详细

PAT B1013 数素数

时间:2020-03-27 23:42:58      阅读:64      评论:0      收藏:0      [点我收藏+]

令 P?i?? 表示第 i 个素数。现任给两个正整数 MN10?4??,请输出 P?M?? 到 P?N?? 的所有素数。

输入格式:

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

输出格式:

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

输入样例:

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\n", i); } else { printf("%d ", i); } } else if (count > m) { break; } } } system("pause"); return 0; }

 

PAT B1013 数素数

原文:https://www.cnblogs.com/syq816/p/12584819.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!