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] + " ");
}
}
}
}