mathematics and me

We must know, We will know。 -----Hilbert

2014年5月8日星期四

Project Euler答题(6--10)

为防止帖子太长,故新开一贴,继续答题。
2014.5.8

第六题(python):

sum_of_squares = 0
sum_of_number = 0

for i in range(1, 101):
    sum_of_squares = sum_of_squares + i*i

for i in range(1, 101):
    sum_of_number = sum_of_number + i

print sum_of_number**2 - sum_of_squares

2014.5.8

第七题(python):

import math
import random
import sys   
sys.setrecursionlimit(1000000)

# def is_prime(num):
#     i = 2
#     isprime = True
#     while i <= int(math.sqrt(num)):
#         if num % i == 0:
#             isprime = False
#             break
#         i = i + 1
#     return isprime

# def is_prime(num):
#     if num % 2 == 0:
#         return False;
#     i = 3
#     isprime = True
#     while i <= int(math.sqrt(num)):
#         if num % i == 0:
#             isprime =  False
#             break;
#         i = i + 2
#     return isprime

# prime_list = [2, 3]
# def is_prime(num):
#     isprime = True
#     i = 0
#     while i < len(prime_list):
#         if num % prime_list[i] == 0:
#             isprime = False
#             break
#         i = i + 1
#     return isprime

prime_list = [2, 3]
def is_prime(num):
    isprime = True
    i = 0
    while i < len(prime_list) and prime_list[i] <= int(math.sqrt(num)):
        if num % prime_list[i] == 0:
            isprime = False
            break
        i = i + 1
    return isprime

# def is_prime(num):
#     f = 5
#     isprime = True
#     r = int(math.sqrt(num)) + 1
#     if num % 2 == 0 or num % 3 == 0:
#         return False
#     while f <= r:
#         if num % f == 0:
#             isprime = False
#         elif num % (f + 2) == 0:
#             isprime = False
#         f = f + 6
#     return isprime

# Wilson' theroem
# def factorial(n):
#     if (n == 1):
#         return n
#     else:
#         return n * factorial(n - 1)
# def is_prime(num):
#     if (factorial(num - 1) + 1) % num == 0:
#         return True
#     else:
#         return False

# Fermat's little theroem
# def FermatPrimalityTest(number):
#     for time in range(10):
#         randomNumber = random.randint(2, number - 1)
#         if ( pow(randomNumber, number-1, number) != 1 ):
#             return False
#     return True


number_of_prime = 2
num = 5
while True:
    if is_prime(num):
        prime_list.append(num)
        number_of_prime = number_of_prime + 1
        if number_of_prime == 40001:
            print num
            break
    # if is_prime(num) == False and FermatPrimalityTest(num) == True:
    #     print num
    num = num + 2



2014.5.14

第八题(python):

num = '''73167176531330624919225119674426574742355349194934
        96983520312774506326239578318016984801869478851843
        85861560789112949495459501737958331952853208805511
        12540698747158523863050715693290963295227443043557
        66896648950445244523161731856403098711121722383113
        62229893423380308135336276614282806444486645238749
        30358907296290491560440772390713810515859307960866
        70172427121883998797908792274921901699720888093776
        65727333001053367881220235421809751254540594752243
        52584907711670556013604839586446706324415722155397
        53697817977846174064955149290862569321978468622482
        83972241375657056057490261407972968652414535100474
        82166370484403199890008895243450658541227588666881
        16427171479924442928230863465674813919123162824586
        17866458359124566529476545682848912883142607690042
        24219022671055626321111109370544217506941658960408
        07198403850962455444362981230987879927244284909188
        84580156166097919133875499200524063689912560717606
        05886116467109405077541002256983155200055935729725
        71636269561882670428252483600823257530420752963450'''
num = num.replace('\n','').replace(' ','')

greatest = 0

for i in range(0, 996):
    temp = int(num[i:i + 1]) * int(num[i + 1:i + 2]) * \
        int(num[i + 2:i + 3]) * int(num[i + 3:i + 4]) * \
        int(num[i + 4:i + 5])
    if temp > greatest:
        greatest = temp

print greatest

2014.5.14

第九题(python):
import math

a = 1
while a < 333:
    b = a + 1
    while b < 1000:
        c = math.sqrt(a*a + b*b)
        if a + b + c == 1000:
            print a, b, c
            print a*b*c
        b = b + 1
    a = a + 1

2014.5.14

第十题(python):
注释掉的是其他一些方法。
import math

# def is_prime(num):
#     i = 2
#     isprime = True
#     while i <= int(math.sqrt(num)):
#         if num % i == 0:
#             isprime = False
#             break
#         i = i + 1
#     return isprime

# prime_list = [2, 3]
# def is_prime(num):
#     isprime = True
#     i = 0
#     while i < len(prime_list) and prime_list[i] <= int(math.sqrt(num)):
#         if num % prime_list[i] == 0:
#             isprime = False
#             break
#         i = i + 1
#     return isprime

# sum = 5
# num = 5

# while num < 2000000:
#     if is_prime(num):
#         prime_list.append(num)
#         sum = sum + num
#     num = num + 2

# print sum


# Sieve of Eratosthenes
sieve = [False, False]
for i in range(0, 2000001):
    sieve.append(True)
for i in range(2, int(math.sqrt(2000000) + 1)):
    if sieve[i] == True:
        j = i*i
        while j <= 2000000:
            sieve[j] = False
            j = j + i

sum = 0
for i in range(2, 2000001):
    if sieve[i] == True:
        sum = sum + i
print sum
第十题(java):
class ProjectEuler10{
    public static void main(String [] args){
        long sum = 2;
        long num = 3;
        while(num < 2000000){
            if(isPrime(num)){
                sum = sum + num;
            }
            num = num + 2;
        }
        System.out.println(sum);
    }
    public static boolean isPrime(long num){
        long i = 2;
        boolean isprime = true;
        while(i <= Math.sqrt(num)){
            if(num % i == 0){
                isprime = false;
                break;
            }
            i++;
        }
        return isprime;
    }
}

没有评论:

发表评论