【ACWing 每日一题之质数】

文章展示了两种C++编程实现质数筛选的方法,包括埃式筛和线性筛。这两种算法用于找出一定范围内的质数,并能求解第k个质数。程序读入k值,输出对应的质数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

题目:

埃式筛质数:

线性筛质数


题目:

输出从小到大的第 k个质数。

输入格式

输入包含多组数据。

每组数据一行,一个整数 k。

输出格式

每组数据输出占一行,输出第 k 个质数。

数据范围

1≤k≤10000,
每个输入最多包含 100 组数据。

输入样例:

3
7

输出样例:

5
17

埃式筛质数:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110010;

int primes[N], cnt;
bool st[N];

void get_primes(int n)  
{
  for(int i = 2; i <= n; i ++ )
  if(!st[i])//若此时i不被标记,说明i不是比它小的数的倍数,说明i是质数
  {
      primes[cnt ++ ] = i;
      for(int j = i * 2; j <= n; j += i)
       st[j] = true;
  }
}


int main()
{
    get_primes(110000);
    
    int k;
    while (cin >> k) cout << primes[k - 1] << endl;
    
    return 0;
}

线性筛质数

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110010;

int primes[N], cnt;
bool st[N];

void get_primes(int n)  
{
   for(int i = 2; i <= n; i ++ )
   {
       if(!st[i]) primes[cnt ++ ] = i;
       for(int j = 0; primes[j] * i <= n; j ++)
       {
           st[primes[j] * i] = true;
           if(i % primes[j] == 0) break;
       }
   }
}


int main()
{
    get_primes(110000);
    
    int k;
    while (cin >> k) cout << primes[k - 1] << endl;
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值