您的位置:首页 > 其它

project Euler第七题

2011-11-07 10:51 363 查看
上大学的时候买了个手机,上边的游戏都是java做的,所以在还不知道什么是java的时候就想学习java了,但是现在都研一了,还没有怎么学习过java,书倒是看了不少,编程思想都看两边了,可是从没用java做过程序,先是用php做网站,再是用python做网站,以后就用java做project Euler了,聊以慰藉吧。

题目:

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10 001st prime number?

算法1:

package ten;

public class Problem7 {
public static void main(String args[]){
int i=2,j=0;
for(;j<10001;i++){
Prime prime = new Prime(i);
if(prime.is_prime()){
j++;
}
}
System.out.println(i-1);

}
}

class Prime{
public int num;

public Prime(int i){
num = i;
}
public boolean is_prime(){
for(int i=2;i*i<=num;i++){
if(num%i == 0){
return false;
}
}
return true;
}
}


算法2:

package ten;

public class Problem7 {
public static void main(String args[]){
int i=3,j=1;
for(;j<10001;i+=2){
Prime prime = new Prime(i);
if(prime.is_prime()){
j++;
}
}
System.out.println(i-2);

}
}

class Prime{
public int num;

public Prime(int i){
num = i;
}
public boolean is_prime(){
for(int i=2;i*i<=num;i++){
if(num%i == 0){
return false;
}
}
return true;
}
}


结果:104743

两个算法基本上是一样的,第二个要比第一个好一点,第一个就是从二开始一个一个的算每个数是不是素数,直到找到第10001个为止。因为除了2以外所有的素数都是奇数,所以就从3开始判断,而且只判断奇数。

最近一直用python,乍一写java还很是不习惯,特别是在语法上,其实还是比较喜欢python,觉得python更优雅一些。下边也给出第二种算法的python版:

#!/usr/bin/env python
#coding=utf-8

import time

def timeit(fn):
def decorator():
start = time.time()
fn()
end = time.time()
print end - start
return decorator

def is_prime(num):
i = 2
while i**2<=num:
if num%i == 0:
return False
i += 1
return True
@timeit
def prime():
j,k = 3,1
while k<10001:
if is_prime(j):
k += 1
j += 2
print j-2

if __name__ == '__main__':
prime()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: