题目链接: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;
}
本文介绍了一种通过素数打表的方法来求解第10001个素数的问题。首先定义了一个素数判断函数,然后通过不断生成并检查数字来填充素数数组,直至找到第10001个素数。
337

被折叠的 条评论
为什么被折叠?



