zoukankan      html  css  js  c++  java
  • JD 题目1040:Prime Number (筛法求素数)

    OJ题目:click here~~

    题目分析:输出第k个素数

    贴这么简单的题目,目的不清纯歧视

    用筛法求素数的基本思想是:把从1開始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。

    依次类推。直到筛子为空时结束。

    如有:

    1 2 3 4 5 6 7 8 9 10
    11 12 13 14 15 16 17 18 19 20
    21 22 23 24 25 26 27 28 29 30
    1不是素数。去掉。剩下的数中2最小,是素数,去掉2的倍数。余下的数是:
    3 5 7 9 11 13 15 17 19 21 23 25 27 29
    剩下的数中3最小。是素数,去掉3的倍数,如此下去直到全部的数都被筛完,求出的素数为:
    2 3 5 7 11 13 17 19 23 29

    AC_CODE

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <iostream>
    
    using namespace std ;
    const int N = 1000000;
    bool prime[N] ;
    void initprime(){
        memset(prime, 1 , sizeof(prime)) ;
        prime[0] = prime[1] = 0 ;
        double t = sqrt(N) + 1 ;
        for(int i = 2;i < t;i++){
            if(prime[i]){
                for(int j = i + i;j < N;j += i)
                    prime[j] = false ;
            }
        }
    }
    
    int main(){
        initprime();
        int k , t ;
        while(cin >> k){
            t = 0 ;
            for(int i = 0;i < N;i++){
                if(prime[i]){
                    t++;
                    if(t == k){
                        cout << i << endl ;
                        break ;
                    }
                }
            }
        }
        return  0 ;
    }
    


  • 相关阅读:
    2019第二周作业
    求最大值及其下标
    查找整数
    2018秋季学习总结
    抓老鼠 亏了还是赚了
    币值转换
    打印沙漏
    从文本中找出url,并附上链接。
    手机端点击输入框页面会放大
    <dl>、<dt>和<dd>标记的用法
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7367995.html
Copyright © 2011-2022 走看看