3609 - 找素数(蓝桥杯2012决赛第1题)
时间限制 : 1 秒
内存限制 : 128 MB
素数就是不能再进行等分的整数。比如:7,11。
而9不是素数,因为它可以平分为3等份。
一般认为最小的素数是2,接着是3,5,...
请问,第100002(十万零二)个素数是多少?
请注意:“2” 是第一素数,“3” 是第二个素数,依此类推。
题目输入
题目输出
输入/输出样例
输入格式
输出格式
C语言解答
#include<stdio.h> #include<math.h> int main() { printf("1299743"); }
C++解答
#include<iostream> #include<algorithm> using namespace std; int p[4]={1,4,9,9}; int isprime(int n) { int i; for(i=2;i*i<=n;i++) { if(n%i==0) return 0; } return 1; } int main() { int cnt=0; int i; for(i=2;cnt!=100002;i++) { if(isprime(i)) cnt++; } cout<<i-1; return 0; }
Java解答
public class Main { public static void main(String[] args) { int i,n=1; for(i=3;;i+=2) { if(IsPrime(i)) { n++; } if(n == 100002) break; } System.out.println(i); } static boolean IsPrime(int n) { for(int i=2;i*i<=n;i++) { if(n%i==0) return false; } return true; } }
Python解答
# coding=utf-8 a=[i for i in range(1500000)] b =[] for j in range(2,int(len(a)/2)): if(a[j]==1): continue for k in range(2,int(len(a)/j)): if j*k<len(a): # print(j*k) a[j*k]=1 for i in range(2,len(a)): if(a[i]!=1 ): b.append(i) print(b[100001])