标签:ica sqrt otto bottom include space 输入一个正整数n stream 内容
---恢复内容开始---
输入一个正整数n,求第n小的质数。
10
29
1 #include<iostream> 2 using namespace std; 3 int n,s; 4 int p[10001]; 5 int pan(int t) 6 { 7 while(1) 8 { 9 bool ok=0; 10 for(int i=1;i<=s;i++)//若它是质数,则不不能整除比它小的所有的质数 11 if(t%p[i]==0) 12 { 13 ok=1;break; 14 } 15 if(ok) 16 { 17 t++;continue; 18 } 19 return t; 20 } 21 } 22 int main() 23 { 24 cin>>n; 25 p[1]=2;s++;//s表示当前质数数目 26 for(int i=2;i<=n;i++) 27 { 28 int t=p[s]+1;//下一个质数的至少比上一个质数大1 29 int h=pan(t);//确定下一个质数 30 p[++s]=h; 31 } 32 cout<<p[n]; 33 }
#include<cstdio> #include<cmath> using namespace std; int n,s; int p[100001]; int devide(double k) { int x=(int)k; for(int i=1;i<s;i++) { if(p[i]>=x) return i+1;//因为开立方后的数k强制转化成了整数x,实际上x比k小了,所以要+1 } } int main() { scanf("%d",&n); p[1]=2;p[2]=3; s=2; while(s<n) { int tmp=p[s];//上一个质数 s++;//当前要找的是第s个质数 while(1) { tmp++;//至少比上一个质数大1 bool ok=false; int test=devide(sqrt(tmp));//找到要判断的数开平方后处于哪两个质数之间 for(int i=1;i<=test;i++) if(tmp%p[i]==0) { ok=true; break; } if(ok) continue; p[s]=tmp; break; } } printf("%d",p[n]); }
---恢复内容结束---
标签:ica sqrt otto bottom include space 输入一个正整数n stream 内容
原文地址:http://www.cnblogs.com/z360/p/6260403.html