1013 数素数 (20)(20 分)

Posted luxuer

tags:

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

 

令P~i~表示第i个素数。现任给两个正整数M <= N <= 10^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

分析: 题目要求的是打出前10000个素数, 那么是否可以估算出最后一个素数是多大?

根据素数分布公式, 1~x范围内的素数个数大概是x/ln(x), 将x=100000, 200000逐一带入,

可以发现200000符合要求.

代码为: 

 1 #include <cstdio>
 2 #include <cstdlib> 
 3 #include <cmath> // sqrt
 4 #include <cstring> // memset
 5 #include <vector>
 6 #include <iostream>
 7 using namespace std;
 8 
 9 #define range 200000
10 bool isPrime[range+5];
11 
12 int main()
13 {
14     //freopen("input.txt", "r", stdin);
15     memset(isPrime, 1, (range+5)*sizeof(bool));
16     
17     int sqrt_of_range = sqrt(range);
18     for(int i=2;i<=sqrt_of_range;i++)
19         if(isPrime[i])
20             for(int j=i*i;j<=range;j+=i)
21                 isPrime[j] = 0;
22     vector<int> primes;
23     primes.push_back(1);
24     for(int i=2;i<range;i++)
25         if(isPrime[i])
26             primes.push_back(i);
27     
28     int M, N;
29     cin>>M>>N;
30     for(int i=0;i<N-M+1;i++)
31     {
32         cout<<primes[i+M];
33         if(i!=N-M)
34         {
35             if(i%10 == 9)
36                 cout<<endl;
37             else
38                 cout<< ;
39         }
40     }
41     return 0;
42 } 

 

 

 

 

 

 

#include <cstdio>#include <cstdlib> #include <cmath> // sqrt#include <cstring> // memset#include <vector>#include <iostream>using namespace std;
#define range 200000bool isPrime[range+5];
int main(){//freopen("input.txt", "r", stdin);memset(isPrime, 1, (range+5)*sizeof(bool));int sqrt_of_range = sqrt(range);for(int i=2;i<=sqrt_of_range;i++)if(isPrime[i])for(int j=i*i;j<=range;j+=i)isPrime[j] = 0;vector<int> primes;primes.push_back(1);for(int i=2;i<range;i++)if(isPrime[i])primes.push_back(i);int M, N;cin>>M>>N;for(int i=0;i<N-M+1;i++){cout<<primes[i+M];if(i!=N-M){if(i%10 == 9)cout<<endl;elsecout<<‘ ‘;}}return 0;} 










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

PTA乙级 (1013 数素数 (20分))

1013 数素数 (20 分)

1013 数素数 (20 分)

B 1013 数素数 (20分)

1013 数素数 (20分)

PAT乙级1013 数素数 (20 分)