Add more solutions
Added solutions for problems 36, 37, 38, 39 and 40 in python and C
This commit is contained in:
parent
4e6b5c774f
commit
cac80478da
32
C/p036.c
Normal file
32
C/p036.c
Normal file
@ -0,0 +1,32 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include "projecteuler.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i, sum = 0;
|
||||
double elapsed;
|
||||
struct timespec start, end;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||
|
||||
for(i = 1; i < 1000000; i += 2)
|
||||
{
|
||||
if(is_palindrome(i, 10) && is_palindrome(i, 2))
|
||||
{
|
||||
sum += i;
|
||||
}
|
||||
}
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||
|
||||
elapsed = (end.tv_sec - start.tv_sec) + (double)(end.tv_nsec - start.tv_nsec) / 1000000000;
|
||||
|
||||
printf("Project Euler, Problem 36\n");
|
||||
printf("Answer: %d\n", sum);
|
||||
|
||||
printf("Elapsed time: %.9lf seconds\n", elapsed);
|
||||
|
||||
return 0;
|
||||
}
|
73
C/p037.c
Normal file
73
C/p037.c
Normal file
@ -0,0 +1,73 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
#include "projecteuler.h"
|
||||
|
||||
int is_tr_prime(int n);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i = 0, n = 1, sum = 0;
|
||||
double elapsed;
|
||||
struct timespec start, end;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||
|
||||
while(i < 11)
|
||||
{
|
||||
if(is_tr_prime(n))
|
||||
{
|
||||
sum += n;
|
||||
i++;
|
||||
}
|
||||
n++;
|
||||
}
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||
|
||||
elapsed = (end.tv_sec - start.tv_sec) + (double)(end.tv_nsec - start.tv_nsec) / 1000000000;
|
||||
|
||||
printf("Project Euler, Problem 37\n");
|
||||
printf("Answer: %d\n", sum);
|
||||
|
||||
printf("Elapsed time: %.9lf seconds\n", elapsed);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int is_tr_prime(int n)
|
||||
{
|
||||
int i, tmp;
|
||||
|
||||
if(n < 11 || !is_prime(n))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
tmp = n / 10;
|
||||
|
||||
while(tmp > 0)
|
||||
{
|
||||
if(!is_prime(tmp))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
tmp /= 10;
|
||||
}
|
||||
|
||||
i = 10;
|
||||
tmp = n % i;
|
||||
|
||||
while(tmp != n)
|
||||
{
|
||||
if(!is_prime(tmp))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
i *= 10;
|
||||
tmp = n % i;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
107
C/p038.c
Normal file
107
C/p038.c
Normal file
@ -0,0 +1,107 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
int is_pandigital(int value, int n);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i, j, tmp;
|
||||
long int n, max = 0;
|
||||
double elapsed;
|
||||
struct timespec start, end;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||
|
||||
for(i = 1; i < 10000; i++)
|
||||
{
|
||||
n = 0;
|
||||
j = 1;
|
||||
do
|
||||
{
|
||||
tmp = i * j;
|
||||
n += tmp;
|
||||
j++;
|
||||
|
||||
if(n > max && is_pandigital(n, 9))
|
||||
{
|
||||
max = n;
|
||||
}
|
||||
if(i * j < 10)
|
||||
{
|
||||
n *= 10;
|
||||
}
|
||||
else if(i * j < 100)
|
||||
{
|
||||
n *= 100;
|
||||
}
|
||||
else if(i * j < 1000)
|
||||
{
|
||||
n *= 1000;
|
||||
}
|
||||
else if(i * j < 10000)
|
||||
{
|
||||
n *= 10000;
|
||||
}
|
||||
else if(i * j < 100000)
|
||||
{
|
||||
n *= 100000;
|
||||
}
|
||||
}while(n <= 987654321);
|
||||
}
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||
|
||||
elapsed=(end.tv_sec-start.tv_sec)+(double)(end.tv_nsec-start.tv_nsec)/1000000000;
|
||||
|
||||
printf("Project Euler, Problem 38\n");
|
||||
printf("Answer: %ld\n", max);
|
||||
|
||||
printf("Elapsed time: %.9lf seconds\n", elapsed);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int is_pandigital(int value, int n)
|
||||
{
|
||||
int *digits;
|
||||
int i, digit;
|
||||
|
||||
if((digits = (int *)calloc(n+1, sizeof(int))) == NULL)
|
||||
{
|
||||
fprintf(stderr, "Error while allocating memory\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for(i = 0; i < n && value > 0; i++)
|
||||
{
|
||||
digit = value % 10;
|
||||
digits[digit]++;
|
||||
value /= 10;
|
||||
}
|
||||
|
||||
if(i < n || value > 0)
|
||||
{
|
||||
free(digits);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(digits[0] != 0)
|
||||
{
|
||||
free(digits);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for(i = 1; i <= n; i++)
|
||||
{
|
||||
if(digits[i] != 1)
|
||||
{
|
||||
free(digits);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
free(digits);
|
||||
|
||||
return 1;
|
||||
}
|
74
C/p039.c
Normal file
74
C/p039.c
Normal file
@ -0,0 +1,74 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int p, m, n, a, b, c, count, max = 0, res = 0, tmpa, tmpb, tmpc, i;
|
||||
int savedc[1000] = {0};
|
||||
double elapsed;
|
||||
struct timespec start, end;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||
|
||||
for(p = 12; p <= 1000; p++)
|
||||
{
|
||||
count = 0;
|
||||
a = 0;
|
||||
b = 0;
|
||||
c = 0;
|
||||
|
||||
for(m = 2; m * m < p; m++)
|
||||
{
|
||||
for(n = 1; n < m; n++)
|
||||
{
|
||||
a = m * m - n * n;
|
||||
b = 2 * m * n;
|
||||
c = m * m + n * n;
|
||||
|
||||
if(a + b + c == p && !savedc[c])
|
||||
{
|
||||
savedc[c] = 1;
|
||||
count++;
|
||||
}
|
||||
|
||||
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 && !savedc[tmpc])
|
||||
{
|
||||
savedc[tmpc] = 1;
|
||||
count++;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(count > max)
|
||||
{
|
||||
max = count;
|
||||
res = p;
|
||||
}
|
||||
}
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||
|
||||
elapsed = (end.tv_sec - start.tv_sec) + (double)(end.tv_nsec - start.tv_nsec) / 1000000000;
|
||||
|
||||
printf("Project Euler, Problem 39\n");
|
||||
printf("Answer: %d\n", res);
|
||||
|
||||
printf("Elapsed time: %.9lf seconds\n", elapsed);
|
||||
|
||||
return 0;
|
||||
}
|
79
C/p040.c
Normal file
79
C/p040.c
Normal file
@ -0,0 +1,79 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int i, value, n;
|
||||
int digits[1000005];
|
||||
double elapsed;
|
||||
struct timespec start, end;
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &start);
|
||||
|
||||
i = 1;
|
||||
value = 1;
|
||||
|
||||
while(i <= 1000000)
|
||||
{
|
||||
if(value < 10)
|
||||
{
|
||||
digits[i-1] = value;
|
||||
i++;
|
||||
}
|
||||
else if(value < 100)
|
||||
{
|
||||
digits[i-1] = value / 10;
|
||||
digits[i] = value % 10;
|
||||
i += 2;
|
||||
}
|
||||
else if(value < 1000)
|
||||
{
|
||||
digits[i-1] = value / 100;
|
||||
digits[i] = (value / 10) % 10;
|
||||
digits[i+1] = value % 10;
|
||||
i += 3;
|
||||
}
|
||||
else if(value < 10000)
|
||||
{
|
||||
digits[i-1] = value / 1000;
|
||||
digits[i] = (value / 100) % 10;
|
||||
digits[i+1] = (value / 10) % 10;
|
||||
digits[i+2] = value % 10;
|
||||
i += 4;
|
||||
}
|
||||
else if(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 += 5;
|
||||
}
|
||||
else if(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 += 6;
|
||||
}
|
||||
value++;
|
||||
}
|
||||
|
||||
n = digits[0] * digits[9] * digits[99] * digits[999] * digits[9999] * digits[99999] * digits[999999];
|
||||
|
||||
clock_gettime(CLOCK_MONOTONIC, &end);
|
||||
|
||||
elapsed=(end.tv_sec-start.tv_sec)+(double)(end.tv_nsec-start.tv_nsec)/1000000000;
|
||||
|
||||
printf("Project Euler, Problem 40\n");
|
||||
printf("Answer: %d\n", n);
|
||||
|
||||
printf("Elapsed time: %.9lf seconds\n", elapsed);
|
||||
|
||||
return 0;
|
||||
}
|
23
Python/p036.py
Normal file
23
Python/p036.py
Normal 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
49
Python/p037.py
Normal 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
69
Python/p038.py
Normal 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
60
Python/p039.py
Normal 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
60
Python/p040.py
Normal 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()
|
Loading…
x
Reference in New Issue
Block a user