3609 - 找素数(蓝桥杯2012决赛第1题)

通过次数

0

提交次数

0

时间限制 : 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])