【小韦同学@神犇营-my0120-第n小的质数】
题目:
描述
输入一个正整数 n,求第 n 小的质数。
输入
一个不超过 10000 的正整数 n。
输出
第 n 小的质数。
输入样例
10
输出样例
29
提示
有一个正整数 x,让 x 依次除以 2~x-1,若能整除,说明不是素数。
有一种更快的办法,就是让 x 依次除以 2~sqrt(x),其中 sqrt(x) 为根号 x 的值,是 double 型的。
题解:
/*********************************************************************
* 题目:神犇营-my0120-第n小的质数
* 作者:小韦老师
* 邮箱:weichangying_wcy@163.com
* 题解:
思路:
用一个变量存储素数的个数(计数器) cnt,初始化为 0。
用一个变量存储当前判断的数 i,初始化为 2。
若当前的 i 为素数,则计数器 cnt 加 1,当 cnt 等于 n 时,则退出循环,
否则 i 加 1。
最后输出 i 即可。
注意:
判断素数时,要枚举从 2 ~sqrt(i)(根号 i)是否能整除 i,而不是是枚
举 2 ~ i - 1,不然会超时。
*********************************************************************/
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int ans = 0;
int i = 2, j;
while (1) {
int sqr = sqrt(i);
for (j = 2; j <= sqr; j++) {
if (i % j == 0) {
break;
}
}
if (j > sqr) ans++;
if (ans == n) {
break;
}
i++;
}
cout << i;
return 0;
}
我是小韦同学,企者不立,跨者不行,每天进步一点点。
欢迎大家多多交流,如果发现有错误,请多指正。有疑问的同学也可以留言评论或者发邮件。
邮箱:weichangying_wcy@163.com