求小于n的第k个质数
0<n=<=400000000(整数的范围是2^32 大约为2*10^9)
0<k<=2500
代码:
#include<iostream>
#include<cmath>
using namespace std;
int isprime(int n){
int m=sqrt(n); //定理:如果n是合数,那么n的两个因数中必有一个小于等于根号n 举例试一下即可
for(int i=2;i<=m;i++){//for循环中不能写i<=sqrt(n)这样会浪费很多时间 因为sqrt(n)也是在调用函数
if(n%i==0){
return 0;
}
}
return 1;
}
int main()
{
int n,k;
while(cin>>n>>k){
int flag=0;
for(int i=n-1;i>=2;i--){
if(isprime(i)){
flag++;
if(flag==k){
cout<<i<<endl;
break;
}
}
}
}
return 0;
}