解题思路:

注意事项:

参考代码:

#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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论