码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-02-06 01:48:09      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:str   creat   最大   char   val   can   vector   时间   turn   

题目

令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("\n");
    }
    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("\n");
    }
    return 0;
}


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

标签:str   creat   最大   char   val   can   vector   时间   turn   

原文地址:https://www.cnblogs.com/houzm/p/12267212.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!