1099:第n小的质数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 19092 通过数: 9527
【题目描述】
输入一个正整数n,求第n小的质数。
【输入】
一个不超过10000的正整数n。
【输出】
第n小的质数。
【输入样例】
10
【输出样例】
29 源代码
#include<iostream> #include<cmath> using namespace std; int main() { int n; int i,j; int sum=0; cin>>n; for(i=2;; i++) { for(j=2; j<=sqrt(i)&&i%j!=0; j++); if(j>sqrt(i)) { sum++; if(sum==n) { cout<<i<<endl; break; } } } return 0; }
这道题也是寻找素数,这里不仅仅是循环嵌套的重要应用,而且还让我学到了有一些新方法当第二个for在循环时,并不用加上一些其他的操作,而判断方式均在for中体现如
for(j=2; j<=sqrt(i)&&i%j!=0; j++);可写为:for(j=2;j<=sqrt(i);j++){ if(i%j!=0) continue; else break; //这里当j最大时,j+1>sqrt(i),跳出循环}if(j>sqrt(i))...这样可以避免运算范围过大,计数重复等问题。 在第一个for循环中,第二个循环条件没有加,是因为这里的运算已经比较复杂,可以不输入范围,而后面的break可以帮助它跳出循环,避免死循环。 这道题中的break的用法以及用第二个for来排查素数的方法都是我所没有想到的,这里的用法也教会了我许多情景下的用法,对break的理解和使用也更加透彻了,break在很多时候都时辅助跳出循环的好帮手,之后的题目也有很多用到了break跳出循环,也是”一题点醒梦中人”
原文地址:https://www.cnblogs.com/jd1412/p/12244227.html
时间: 2024-10-03 09:55:02