ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

44:第n小的质数

44:第n小的质数
/** * 题目名称:第n小的质数 <p> * 题目来源:http://noi.openjudge.cn/ch0105/44/ <p> * 程序功能:输出指定编号的质数 * * @author 潘磊,just_panlei@just.edu.cn * @version 1.0 */importjava.util.Scanner;publicclassMain{/** * 判断指定正整数是否为质数。 * * @param num 指定正整数。 * @return true当且仅当num是质数,否则false。 */publicbooleanisPrime(intnum){if(num<2){// 小于2的整数不是质数returnfalse;}if(num==2){// 2是质数returntrue;}if(num%2==0){// 除2以外,其它偶数都不是质数returnfalse;}/* 从3依次遍历到sqrt(num),仅遍历奇数 */for(inti=3;i*i<=num;i+=2){if(num%i==0){// 如果当前整数是num的因子returnfalse;// 说明num不是质数}}returntrue;// 以上没有返回false,说明num是质数}/** * 返回指定编号的质数。 * * @param n 指定编号。 * @return 第n个质数。 */publicinttheNthPrime(intn){if(n==1){// 第一个质数是2return2;}n--;// 去掉质数2,查找的质数数量减1intans=-1;// 第n个质数,初始为-1(这里初始值可以是任意整数)/* 从3开始依次遍历每个奇数,直至找到第n个质数 */for(inti=3;n>0;i+=2){if(isPrime(i)){// 如果当前整数是质数ans=i;// 更新ans为当前整数n--;// 令查找的质数数量减1}}returnans;}publicstaticvoidmain(String[]args){Maincall=newMain();Scannerinput=newScanner(System.in);intn=input.nextInt();System.out.print(call.theNthPrime(n));}}
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进