44:第n小的质数:编码问题:感觉我的代码与其他答案差不多,样例也通过了,可就是Wrong Answer,请问问题出在哪里?
44:第n小的质数
描述
输入一个正整数n,求第n小的质数。
输入
一个不超过10000的正整数n。
输出
第n小的质数。
样例输入
10
样例输出
29
我的代码
#include
#include
int main()
{
int n,i=3,j=1,k,l;
scanf("%d",&n);
if(n==1){
printf("2");
}else{
int count=1;
while(i<10000){
l=0;
for(k=2;k<=sqrt(i);k++){
if(i%k==0){
l++;
break;
}
}
if(l==0){
count++;
if(n==count){
printf("%d",i);
}
}
i++;
}
}
return 0;
}
从2开始判断是否质数,同时计数,到指定的个数就可以了
一个不超过10000的正整数n。====题目说的是可以获得第9999个质数,不是质数的值小于10000啊
所以你不能限定i<10000的
修改如下:
int main()
{
int n,i=3,j=1,k,l;
scanf("%d",&n);
if(n==1)
{
printf("2");
}
else
{
long long count=1;
while(true)
{
l=0;
for(k=2;k<=sqrt(i*1.0);k++)
{
if(i%k==0)
{
l++;
break;
}
}
if(l==0)
{
count++;
if(n==count){
printf("%d",i);
break;
}
}
i++;
}
}
return 0;
}
第一个While的循环判断问题,用i<10000其实是求不出后面的质数的,限定了只能求出小于10000的质数,但是第1230小的质数就已经大于10000了,你试一下改成COUNT<10000
#include <stdio.h>
#include <math.h>
int main() {
int n,i=3,j=1,k,l;
scanf("%d",&n);
if(n==1){
printf("2");
}
else{
int count=1;
while(count<10000){
l=0;
for(k=2;k<=sqrt(i);k++){
if(i%k==0){
l++;
break;
}
}
if(l==0){
count++;
if(n==count){
printf("%d",i);
}
}
i++;
}
}
return 0;
}
什么是第n小的质数呀,没看明白题