aboutsummaryrefslogtreecommitdiff
path: root/wip
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-08-11 18:42:52 +0200
committerCharles <sircharlesaze@gmail.com>2019-08-11 18:42:52 +0200
commit7b624de8e3e3637a07364f992c1d7e4185e4a872 (patch)
treefdb9b0c3f9185b267f9f7bfb9cb4b0e4cdd8cc16 /wip
downloadproject_euler-7b624de8e3e3637a07364f992c1d7e4185e4a872.tar.gz
project_euler-7b624de8e3e3637a07364f992c1d7e4185e4a872.tar.bz2
project_euler-7b624de8e3e3637a07364f992c1d7e4185e4a872.zip
initial commit
Diffstat (limited to 'wip')
-rw-r--r--wip/23-non_abudant_sums.py16
-rw-r--r--wip/26-reciprocal_cycles.py5
-rw-r--r--wip/27-quadratic_primes.py17
-rw-r--r--wip/31-coin_sums.py12
-rw-r--r--wip/37-truncatable_primes.py25
-rw-r--r--wip/45-triangular_pentagonal_and_hexagonal.py9
-rw-r--r--wip/47-distinct_primes_factors.py20
-rw-r--r--wip/49-prime_permutations.py23
-rw-r--r--wip/53-combinatoric-selections.c43
-rw-r--r--wip/92-square_digit_chains.c89
10 files changed, 259 insertions, 0 deletions
diff --git a/wip/23-non_abudant_sums.py b/wip/23-non_abudant_sums.py
new file mode 100644
index 0000000..6e3eea2
--- /dev/null
+++ b/wip/23-non_abudant_sums.py
@@ -0,0 +1,16 @@
+# def getAllDivisorOf(num):
+# divisor_list = []
+# for i in range(1, num):
+# if num % i == 0:
+# divisor_list.append(i)
+# return divisor_list
+
+
+# for num in range(1, 28123 + 1):
+# pass
+
+# for i in range(3):
+# for j in range(3):
+# for k in range(3):
+# if i != j and i != k and j != k:
+# print(i, j, k)
diff --git a/wip/26-reciprocal_cycles.py b/wip/26-reciprocal_cycles.py
new file mode 100644
index 0000000..b502c9a
--- /dev/null
+++ b/wip/26-reciprocal_cycles.py
@@ -0,0 +1,5 @@
+from decimal import Decimal
+
+for i in range(1, 11):
+ # decimals = int(str(1/i)[2:])
+ print(d)
diff --git a/wip/27-quadratic_primes.py b/wip/27-quadratic_primes.py
new file mode 100644
index 0000000..8b21cc6
--- /dev/null
+++ b/wip/27-quadratic_primes.py
@@ -0,0 +1,17 @@
+from itertools import count
+from helper.prime import is_prime
+
+
+ab_iter = [(a, b) for b in range(1_001) for a in range(1_000)]
+
+max_product = 0
+max_prime_seq = 0
+for a, b in ab_iter:
+ for n in count():
+ if (not is_prime(n**2 + a*n + b)) and n > max_prime_seq:
+ max_prime_seq = n
+ max_product = a * b
+ print(max_product)
+ break
+
+
diff --git a/wip/31-coin_sums.py b/wip/31-coin_sums.py
new file mode 100644
index 0000000..c9a823d
--- /dev/null
+++ b/wip/31-coin_sums.py
@@ -0,0 +1,12 @@
+coins = [200, 100, 50, 20, 10, 5, 2, 1]
+
+TOTAL = 200
+coin_index = 0
+combinations = [200]
+combination_nb = 1
+while True:
+ if sum(combinations) == 200:
+ coin_index += 1
+ combinations[0] = coins[coin_index]
+
+
diff --git a/wip/37-truncatable_primes.py b/wip/37-truncatable_primes.py
new file mode 100644
index 0000000..1ad7d29
--- /dev/null
+++ b/wip/37-truncatable_primes.py
@@ -0,0 +1,25 @@
+from helper.prime import primes_loop, is_prime
+
+
+def is_truncatable(prime):
+ p_str = str(prime)
+ for i in range(1, len(p_str)):
+ if not is_prime(int(p_str[i:])):
+ return False
+ for i in range(1, len(p_str)):
+ if not is_prime(int(p_str[:-i])):
+ return False
+ if prime in [2, 3, 5, 7]:
+ return False
+ return True
+
+
+trunc_p_list = []
+for p in primes_loop():
+ if is_truncatable(p):
+ trunc_p_list.append(p)
+ if len(trunc_p_list) == 11:
+ break
+
+print(trunc_p_list)
+print(sum(trunc_p_list))
diff --git a/wip/45-triangular_pentagonal_and_hexagonal.py b/wip/45-triangular_pentagonal_and_hexagonal.py
new file mode 100644
index 0000000..5fba8f8
--- /dev/null
+++ b/wip/45-triangular_pentagonal_and_hexagonal.py
@@ -0,0 +1,9 @@
+from itertools import count
+from helper.numbers import triangular, is_pentagonal, is_hexagonal
+
+
+for i in count(286):
+ t = triangular(i)
+ if is_pentagonal(t) and is_hexagonal(t):
+ print(t)
+ break
diff --git a/wip/47-distinct_primes_factors.py b/wip/47-distinct_primes_factors.py
new file mode 100644
index 0000000..ac09b9a
--- /dev/null
+++ b/wip/47-distinct_primes_factors.py
@@ -0,0 +1,20 @@
+from itertools import count
+from helper.prime import get_prime_factors, primes_loop
+
+# TROP LENT
+
+def as_four_distinct_prime_factors(num):
+ return len(set(get_prime_factors(num))) == 3
+
+def check_next_three(num):
+ for i in range(1, 3):
+ if not as_four_distinct_prime_factors(num + i):
+ return False
+ return True
+
+
+for num in primes_loop():
+ if as_four_distinct_prime_factors(num):
+ if check_next_three(num):
+ print(num)
+ break
diff --git a/wip/49-prime_permutations.py b/wip/49-prime_permutations.py
new file mode 100644
index 0000000..d90754e
--- /dev/null
+++ b/wip/49-prime_permutations.py
@@ -0,0 +1,23 @@
+from itertools import permutations
+from helper.prime import is_prime
+
+
+def constant_inscrease(perms):
+
+
+
+def get_prime_permutations(nb):
+ return sorted([
+ int(''.join(x))
+ for x in permutations(str(nb), 4)
+ if (is_prime(int(''.join(x)))
+ and len(str(int(''.join(x)))) == 4)
+ ])
+
+# print(get_prime_permutations(1487))
+for i in range(1000, 10_000):
+ if not is_prime(i):
+ continue
+ print(get_prime_permutations(i))
+# if all([is_prime(p) for p in permutations]):
+# print(sorted(permutations))
diff --git a/wip/53-combinatoric-selections.c b/wip/53-combinatoric-selections.c
new file mode 100644
index 0000000..9006f5a
--- /dev/null
+++ b/wip/53-combinatoric-selections.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+
+typedef long long unsigned int Natural;
+
+Natural factorial(Natural n)
+{
+ if (n == 1 || n == 0) return 1;
+ else return n * factorial(n - 1);
+}
+
+Natural combination(Natural n, Natural r)
+{
+ if (r > n) exit(1);
+ Natural num = 0;
+ /* for (Natural i = 0; i < r - 1; i++) */
+ /* num *= n - i; */
+ /* return num / factorial(r); */
+ /* if (factorial(r) * factorial(n - r) == 0) return 0; */
+ return (factorial(n) / (factorial(r) * factorial(n - r)));
+ /* return (factorial(r) * factorial(n - r)); */
+}
+
+int main(void)
+{
+ printf("10! = %llu\n", factorial(10));
+ printf("23! = %llu\n", factorial(23));
+ printf("(23 - 10)! = %llu\n", factorial(23 - 10));
+ int counter = 0;
+ Natural comb = 0, n, r;
+ /* for (n = 1; n <= 24; n++) */
+ /* for (r = 1; r <= n; r++) { */
+ /* comb = combination(n, r); */
+ /* if (comb > 1000000) { */
+ /* counter++; */
+ /* comb = combination(23, 10); */
+ printf("%llu C %llu = %llu\n", n, r, comb);
+ /* } */
+ /* } */
+ printf("counter = %d", counter);
+ return 0;
+}
diff --git a/wip/92-square_digit_chains.c b/wip/92-square_digit_chains.c
new file mode 100644
index 0000000..7029ccd
--- /dev/null
+++ b/wip/92-square_digit_chains.c
@@ -0,0 +1,89 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <math.h>
+
+
+int lenHelper(int x)
+{
+ if (x >= 10000000) return 8;
+ if (x >= 1000000) return 7;
+ if (x >= 100000) return 6;
+ if (x >= 10000) return 5;
+ if (x >= 1000) return 4;
+ if (x >= 100) return 3;
+ if (x >= 10) return 2;
+ return 1;
+}
+
+int get_digit(int nb, int digit_index)
+{
+ if (digit_index == 1)
+ return nb % 10;
+
+ return (int)(nb / pow(10.0, (double)(digit_index-1))) % 10;
+}
+
+int next_iteration(int nb)
+{
+ int i, sum = 0;
+ for (i = 0; i < lenHelper(nb); i++) {
+ sum += pow(get_digit(nb, i), 2);
+ }
+ return sum;
+}
+
+bool end_of_square_digit_chain_is_89(int nb)
+{
+ bool once = false;
+ int next_nb;
+ for (int i = 0; i < 10; i++) {
+ // printf("%d", next_nb);
+ next_nb = next_iteration(nb);
+ if (next_nb == 89 || next_nb == 1) {
+ if (once) {
+ return next_nb == 89 ? true : false;
+ }
+ once = true;
+ }
+ nb = next_nb;
+ }
+ return false;
+}
+
+
+int main(void)
+{
+ int i, counter = 0;
+ for (i = 1; i < 10000000; i++) {
+ // printf("%d\n", i);
+ if (end_of_square_digit_chain_is_89(i))
+ counter++;
+ if (i % 1000000 == 0)
+ printf("%d\n", counter);
+ }
+
+ printf("%d\n", counter);
+
+ return 0;
+}
+
+
+
+// def end_of_square_digit_chain_is_89(nb):
+// once = False
+// while True:
+// next_nb = sum([int(x)**2 for x in str(nb)])
+// if next_nb == 89 or next_nb == 1:
+// if once:
+// return True if next_nb == 89 else False
+// once = True
+// nb = next_nb
+
+// counter = 0
+// for i in range(1, 10_000_000):
+// if end_of_square_digit_chain_is_89(i):
+// counter += 1
+// if i % 1000_000 == 0:
+// print(counter)
+// pass
+// print(counter)