? ? 題目鏈接:P3383 【模板】線性篩素數 - 洛谷 | 計算機科學教育新生態
? ? 題目難度:普及一
? ??題目分析:本題是模板題,用到了線性篩法,其中原理是保證范圍內的每個合數都被刪掉(在? ? ? ?bool 數組里面標記為非素數),而且任一合數只被:“最小質因數 × 最大因數(非自己) = 這個? ? ? 合數”
? 下面奉上代碼部分:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;const int N = 1e8 + 10;
int prime[N];
bool vis[N];
int n,q,cnt;void get_prime(int n)
{for(int i = 2; i <= n; i++){if(!vis[i]) prime[cnt++] = i;for(int j = 0; prime[j] <= n / i; j ++) {vis[prime[j] * i] = true;if(i % prime[j] == 0) break;}}
}
int read() {int s = 0, f = 1;char ch = getchar();while (ch < '0' || ch > '9') {if (ch == '-') f = -1;ch = getchar();}while (ch >= '0' && ch <= '9') {s = s * 10 + ch - '0';ch = getchar();}return s * f;
}int main() {n = read(),q = read();get_prime(n);while(q--){int k = read();cout<<prime[k - 1]<<'\n';}return 0;
}