PAT Basic 1013 数素数 (20) [数学问题-素数]

Posted houzm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT Basic 1013 数素数 (20) [数学问题-素数]相关的知识,希望对你有一定的参考价值。

题目

令Pi表示第i个素数。现任给两个正整数M <= N <= 10^4,请输出PM到PN的所有素数。
输?格式:
输?在??中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每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

题目分析

打印从第m个质数到第n个质数之间所有质数,每10个一行

解题思路

  1. 建立质数表
  2. 打印从第m个质数到第n个质数之间所有质数

Code

Code 01

#include <iostream>
#include <cmath>
using namespace std;
int m,n; 
bool isPrime(int v) {
    if(v<=1)return false;
    int sqr=(int)sqrt(1.0*v);
    for(int i=2; i<=sqr; i++) {
        if(v%i==0)return false;
    }
    return true;
}
int prime_table[1000010];
bool prime_bool[1000010];//1000010测试点4错误 
void create_pt() {
    int index = 1;
    for(int i=2; i<1000010; i++) {
        if(prime_bool[i]==false) {
            prime_table[index++]=i;
            for(int j=i+i; j<1000010; j+=i) {
                prime_bool[j]=true;
            }
        }
        if(index>n)break; //节省时间,最大为n,n后面不需要找了, 
    }
}
int main(int argc,char *argv[]) {
    scanf("%d %d",&m,&n);
    create_pt();
    for(int i=1; m+i-1<=n; i++) {
        if(i%10!=1)printf(" ");
        printf("%d",prime_table[m+i-1]);
        if(i%10==0)printf("
");
    }
    return 0;
}

Code 02

#include <iostream>
#include <vector>
using namespace std;
bool isprime(int a) {
    for (int i = 2; i * i <= a; i++)
        if(a % i == 0) return false;
    return true;
}
int main() {
    int M, N, num = 2, cnt = 0;
    cin >> M >> N;
    vector<int> v;
    while (cnt < N) {
        if (isprime(num)) {
            cnt++;
            if (cnt >= M) v.push_back(num);
        }
        num++;
    }
    cnt = 0;
    for (int i = 0; i < v.size(); i++) {
        cnt++;
        if (cnt % 10 != 1) printf(" ");
        printf("%d", v[i]);
        if (cnt % 10 == 0) printf("
");
    }
    return 0;
}


以上是关于PAT Basic 1013 数素数 (20) [数学问题-素数]的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级 1013. 数素数 (20)

PAT 1013. 数素数 (20)

PAT 乙级 1013. 数素数 (20)

PAT乙级1013 数素数 (20 分)

PAT乙级1013.数素数

PAT Basic Level 1013