zoukankan      html  css  js  c++  java
  • 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;} 



  • 相关阅读:
    MySQL 安装
    MySQL简介
    图解十大经典的机器学习算法
    基于Python预测股价
    10_通过httprequest获取跟请求相关的信息
    07_参数提交时action的写法
    08_ServletConfig介绍
    05_servlet生命周期介绍
    06_url_pattern三种写法
    03_servletHello完成
  • 原文地址:https://www.cnblogs.com/Luxuer/p/9374420.html
Copyright © 2011-2022 走看看