题目链接:7.10001st prime
题意:
求第10001个素数。
解题思路:
就素数打表
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10001;
int prime[maxn] = {2, 3};
bool is_prime(int val) { // 判断素数
for(int i = 1; prime[i] <= sqrt(val); i++) {
if(val % prime[i] == 0) {
return false;
}
}
return true;
}
void make(int n) {
int i = 2, val = 5;
while(i < n) {
if(is_prime(val)) {
prime[i] = val;
i++; // 个数加1
}
val += 2; // 每次加2
}
}
int main() {
int n = 10001;
make(n);
cout << prime[n-1] << endl;
return 0;
}
优化:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10001;
int prime[maxn] = {2, 3, 5};
bool is_prime(int val) { // 判断素数
for(int i = 1; prime[i] <= sqrt(val); i++) {
if(val % prime[i] == 0) {
return false;
}
}
return true;
}
void make(int n) {
int i = 3, val1 = 1, val2 = 5;
while(i < n) {
val1 += 6;val2 += 6;
if(is_prime(val1)) {
prime[i] = val1;
i++; // 个数加1
}
if(is_prime(val2)) {
prime[i] = val2;
i++;
}
}
}
int main() {
int n = 10001;
make(n);
cout << prime[n-1] << endl;
return 0;
}