Add more solutions

Added solutions for problems 36, 37, 38, 39 and 40 in python and C
This commit is contained in:
2019-09-21 15:45:18 +02:00
parent 4e6b5c774f
commit cac80478da
10 changed files with 626 additions and 0 deletions

23
Python/p036.py Normal file
View File

@ -0,0 +1,23 @@
#!/usr/bin/python3
from timeit import default_timer
from projecteuler import is_palindrome
def main():
start = default_timer()
sum_ = 0
for i in range(1, 1000000):
if is_palindrome(i, 10) and is_palindrome(i, 2):
sum_ = sum_ + i
end = default_timer()
print('Project Euler, Problem 36')
print('Answer: {}'.format(sum_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

49
Python/p037.py Normal file
View File

@ -0,0 +1,49 @@
#!/usr/bin/python3
from timeit import default_timer
from projecteuler import is_prime
def is_tr_prime(n):
if n < 11 or not is_prime(n):
return False
tmp = n // 10
while tmp > 0:
if not is_prime(tmp):
return 0
tmp = tmp // 10
i = 10
tmp = n % i
while tmp != n:
if not is_prime(tmp):
return 0
i = i * 10
tmp = n % i
return 1
def main():
start = default_timer()
i = 0
n = 1
sum_ = 0
while i < 11:
if is_tr_prime(n):
sum_ = sum_ + n
i = i + 1
n = n + 1
end = default_timer()
print('Project Euler, Problem 37')
print('Answer: {}'.format(sum_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

69
Python/p038.py Normal file
View File

@ -0,0 +1,69 @@
#!/usr/bin/python3
from numpy import zeros
from timeit import default_timer
def is_pandigital(value, n):
i = 0
digits = zeros(n + 1, int)
while i < n and value > 0:
digit = value % 10
digits[digit] = digits[digit] + 1
value = value // 10
i = i + 1
if i < n or value > 0:
return 0
if digits[0] != 0:
return 0
for i in range(1, n+1):
if digits[i] != 1:
return 0
i = i + 1
return 1
def main():
start = default_timer()
max_ = 0
for i in range(1, 10000):
n = 0
j = 1
while 1:
tmp = i * j
n = n + tmp
j = j + 1
if n > max_ and is_pandigital(n, 9):
max_ = n
if i * j < 10:
n = n * 10
elif i * j < 100:
n = n * 100
elif i * j < 1000:
n = n * 1000
elif i * j < 10000:
n = n * 10000
elif i * j < 100000:
n = n * 100000
if n > 987654321:
break
end = default_timer()
print('Project Euler, Problem 38')
print('Answer: {}'.format(max_))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

60
Python/p039.py Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/python3
from numpy import zeros
from timeit import default_timer
def main():
start = default_timer()
max_ = 0
savedc = zeros(1000, int)
for p in range(12, 1001):
count = 0
a = 0
b = 0
c = 0
m = 2
while m * m < p:
for n in range(1, m):
a = m * m - n * n
b = 2 * m * n
c = m * m + n * n
if a + b + c == p and savedc[c] == 0:
savedc[c] = 1
count = count + 1
i = 2
tmpa = a
tmpb = b
tmpc = c
while tmpa + tmpb + tmpc < p:
tmpa = a * i
tmpb = b * i
tmpc = c * i
if tmpa + tmpb + tmpc == p and savedc[tmpc] == 0:
savedc[tmpc] = 1
count = count + 1
i = i + 1
m = m + 1
if count > max_:
max_ = count
res = p
end = default_timer()
print('Project Euler, Problem 39')
print('Answer: {}'.format(res))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()

60
Python/p040.py Normal file
View File

@ -0,0 +1,60 @@
#!/usr/bin/python3
from numpy import zeros
from timeit import default_timer
def main():
start = default_timer()
digits = zeros(1000005, int)
i = 1
value = 1
while i <= 1000000:
if value < 10:
digits[i-1] = value
i = i + 1
elif value < 100:
digits[i-1] = value / 10
digits[i] = value % 10
i = i + 2
elif value < 1000:
digits[i-1] = value / 100
digits[i] = (value / 10) % 10
digits[i+1] = value % 10
i = i + 3
elif value < 10000:
digits[i-1] = value / 1000
digits[i] = (value / 100) % 10
digits[i+1] = (value / 10) % 10
digits[i+2] = value % 10
i = i + 4
elif value < 100000:
digits[i-1] = value / 10000
digits[i] = (value / 1000) % 10
digits[i+1] = (value / 100) % 10
digits[i+2] = (value / 10) % 10
digits[i+3] = value % 10
i = i + 5
elif value < 1000000:
digits[i-1] = value / 100000
digits[i] = (value / 10000) % 10
digits[i+1] = (value / 1000) % 10
digits[i+2] = (value / 100) % 10
digits[i+3] = (value / 10) % 10
digits[i+4] = value % 10
i = i + 6
value = value + 1
n = digits[0] * digits[9] * digits[99] * digits[999] * digits[9999] * digits[99999] * digits[999999]
end = default_timer()
print('Project Euler, Problem 40')
print('Answer: {}'.format(n))
print('Elapsed time: {:.9f} seconds'.format(end - start))
if __name__ == '__main__':
main()