软件工程221班金航


私信TA

用户名:uq_14600592801

访问量:1211

签 名:

这个人不懒,这不是签名吗~

等  级
排  名 9506
经  验 1150
参赛次数 0
文章发表 11
年  龄 19
在职情况 学生
学  校 广西科技师范学院
专  业 软件工程

  自我简介:

从不熬夜只通宵

解题思路:

注意事项:

参考代码:

#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 人评分

  评论区

  • «
  • »