【PAT】(乙级)1013. 数素数 (20)

来源:互联网 发布:三岛由纪夫 禁色 知乎 编辑:程序博客网 时间:2024/06/05 00:08

1013. 数素数 (20)

  • 时间限制 100 ms
  • 内存限制 65536 kB
  • 代码长度限制 8000 B
  • 判题程序 Standard
  • 作者 CHEN, Yue

一、题目

令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出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

二、Tips

Tips: 难过,Java又超时。

三、代码

#include<iostream>#include<cstring>#include<cstdio>#include<ctime>#include<algorithm>using namespace std;bool visit[10100000];int prime[10050];void init_prim(int n){    memset(visit, true, sizeof(visit));    int num = 0;    for (int i = 2; num <= n; ++i){        if (visit[i] == true){            num++;            prime[num] = i;        }        for (int j = 1; ((j <= num) && (i * prime[j] <= 10100000));  ++j){            visit[i * prime[j]] = false;            if (i % prime[j] == 0) break;         }    }}int main(){    memset(prime, 0, sizeof(prime));    int n,m;    cin>>m;    cin>>n;    init_prim(n);    for(int i = m,j=1; i <= n; ++i,j++){        if(j%10==0||i==n){            cout<<prime[i]<<endl;        }else{            cout<<prime[i]<<" ";        }    }    return 0;}
import java.util.Arrays;import java.util.Scanner;/** * 1013. 数素数 (20) * https://www.patest.cn/contests/pat-b-practise/1013 * Created by Relish on 2016/8/6. */public class _1013 {    private static int[] prime;    private static void initPrime(int n) {        prime = new int[n + 1];        boolean[] visit = new boolean[10005];        Arrays.fill(visit, true);        int num = 0;        for (int i = 2; num < n; ++i) {            if (visit[i]) {                num++;                prime[num] = i;            }            for (int j = 1; ((j <= num) && (i * prime[j] <= 10100000)); ++j) {                visit[i * prime[j]] = false;                if (i % prime[j] == 0) break; //点睛之笔            }        }    }    public static void main(String[] args) {        Scanner cin = new Scanner(System.in);        int n = cin.nextInt();        int m = cin.nextInt();        initPrime(m);        for (int i = n, j = 1; i <= m; ++i, j++) {            if (j % 10 == 0 || i == m) {                System.out.println(prime[i]);            } else {                System.out.print(prime[i] + " ");            }        }    }}
0 0
原创粉丝点击