zoukankan      html  css  js  c++  java
  • 洛谷 P3383 【模板】线性筛素数

    洛谷 P3383 【模板】线性筛素数

    洛谷传送门

    题目背景

    本题已更新,从判断素数改为了查询第 kk 小的素数
    提示:如果你使用 cin 来读入,建议使用 std::ios::sync_with_stdio(0) 来加速。

    题目描述

    如题,给定一个范围 nn,有 qq 个询问,每次输出第 kk 小的素数。

    输入格式

    第一行包含两个正整数 n,qn,q,分别表示查询的范围和查询的个数。

    接下来 qq 行每行一个正整数 kk,表示查询第 kk 小的素数。

    输出格式

    输出 qq 行,每行一个正整数表示答案。


    题解:

    唯一的难点是判断素数个数。

    答案是(frac{x}{ln x})个。大约。

    代码:

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=6e6+6;
    const int maxw=1e8+8;
    int prime[maxn],cnt;
    bool v[maxw];
    void euler(int x)
    {
    	cnt=0;
    	for(int i=2;i<=x;i++)
    	{
    		if(!v[i])
    			prime[++cnt]=i,v[i]=1;
    		for(int j=1;j<=cnt&&i*prime[j]<=x;j++)
    		{
    			v[i*prime[j]]=1;
    			if(i%prime[j]==0)
    				break;
    		}
    	}
    }
    int main()
    {
    	int n,q;
    	scanf("%d%d",&n,&q);
    	euler(n);
    	sort(prime+1,prime+cnt+1);
    	while(q--)
    	{
    		int k;
    		scanf("%d",&k);
    		printf("%d
    ",prime[k]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    codeforces 1349 A 思维
    codeforces 1358 D 尺区
    codeforces 1251D 二分+贪心
    codeforces 1260 D 二分
    codeforces 1167B 交互ez
    volatile
    计算多级集合/树/部门树的深度
    Java学习路线-知乎
    day06
    day01_虚拟机与主机之间ip配置
  • 原文地址:https://www.cnblogs.com/fusiwei/p/14080782.html
Copyright © 2011-2022 走看看