解题思路:
注意事项:
参考代码:
#include"stdio.h"
#include"math.h" //数学库,为了使用sqrt根号
int main()
{
int th,i=2,n=2,Num=0,control=0;
//分别对应,第几个质数th,被除数i,除数n,当前质数Num,控制退出循环
scanf("%d",&th);
while(1) //第一个大循环,目的控制除数i,内循环结束加1
{
if(control>=th) break; //和输入的第几个th相等,就是已求出需要的数可以结束
while(1) //被除数能从2开始加到被除数i,判断是不是质数
{
if(i%n==0&&i>2) //如果被1和i之间数整除就不是质数,退出内循环
{
n=2; //初始化被除数
break; //退出内循环
}
else if(n<i) n++; //如果还没加到被除数i且没有被整除,除数继续加1
if(n>=sqrt(i)/3*4) //根号i目的是减少循环次数,*3/4是容错。
{ //可以这么理解,例:6=3*2,最大到6的一半
n=2; //初始化被除数
Num=i; //此时已经到最大的乘积情况了,可以肯定是质数,记录
control++; //控制加1,代表求到了一个质数,当值与输入的th相同,退出外循环
break;
}
}
i++; //除数加1
}
printf("%d",Num); //所有循环结束,输出
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复