https://github.com/tfpf/project-euler
My solutions to some Project Euler problems. Emphasis on elegance (where possible) and performance.
https://github.com/tfpf/project-euler
prime-generator prime-sieve project-euler project-euler-rust-solutions project-euler-solutions sieve-of-atkin
Last synced: 5 months ago
JSON representation
My solutions to some Project Euler problems. Emphasis on elegance (where possible) and performance.
- Host: GitHub
- URL: https://github.com/tfpf/project-euler
- Owner: tfpf
- License: gpl-3.0
- Created: 2023-03-31T05:16:50.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-22T08:42:35.000Z (almost 2 years ago)
- Last Synced: 2024-08-23T08:36:03.260Z (almost 2 years ago)
- Topics: prime-generator, prime-sieve, project-euler, project-euler-rust-solutions, project-euler-solutions, sieve-of-atkin
- Language: Rust
- Homepage:
- Size: 783 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: COPYING.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# Project Euler
Trying my hand at [Project Euler](https://projecteuler.net) as I stumble along learning Rust. I shall only add the
solutions to the first hundred problems here with the intention being to showcase whatever useful data structures I
build along the way. (This is permitted according to the Project Euler guidelines.) Further, I shall restrict myself to
the standard library.
[](https://github.com/tfpf/project-euler/actions/workflows/style.yml)
[](https://github.com/tfpf/project-euler/actions/workflows/lint.yml)
[](https://github.com/tfpf/project-euler/actions/workflows/sanity.yml)
[](https://github.com/tfpf/project-euler/actions/workflows/tests.yml)
To solve, say, problem 16, enter the following command.
```sh
cargo r 16
```
Run it without arguments to sequentially solve all problems for which I have written solutions.
```sh
cargo r
```
Most solutions are rather concise; the heavy lifting is done in the `utils` module. This highlights the intent of the
code by hiding confounding implementation details. Items of particular note therein are the following.
* `is_prime`: fast prime checker which combines trial division and the Miller-Rabin algorithm.
* `pow`: modular exponentiation calculator, emulating the `pow` function of Python.
* `Long`: arbitrary-precision integer type with support for addition and multiplication.
* `Long::factorial`: factorial calculator.
* `Long::pow`: exponentiation calculator.
* `SieveOfAtkin`: fast prime-generating sieve.
[The sieve of Atkin is faster than the sieve of Eratosthenes.](https://github.com/tfpf/sieve-of-atkin)
* `SieveOfAtkin::is_prime`: prime checker for numbers the sieve is generated up to.
* `SieveOfAtkin::iter`: iterator over generated primes.
* `Polygonal`: figurate (triangle, quadrilateral, pentagon, hexagon, …) number generator. Uses only additions and
subtractions.
* `Polygonal::invert`: figurate number checker.
* `PythagoreanTriplets`: Pythagorean triplets generator.
No part of the code in this repository has been written by or in consultation with artificial intelligence chatbots
such as (but not limited to) Bard and ChatGPT.
## Problems and Solutions
|Problem|Solution|
|-:|:-:|
|[1](https://projecteuler.net/problem=1)|[`multiples_of_3_or_5.rs`](src/solutions/multiples_of_3_or_5.rs)|
|[2](https://projecteuler.net/problem=2)|[`even_fibonacci_numbers.rs`](src/solutions/even_fibonacci_numbers.rs)|
|[3](https://projecteuler.net/problem=3)|[`largest_prime_factor.rs`](src/solutions/largest_prime_factor.rs)|
|[4](https://projecteuler.net/problem=4)|[`largest_palindrome_product.rs`](src/solutions/largest_palindrome_product.rs)|
|[5](https://projecteuler.net/problem=5)|[`smallest_multiple.rs`](src/solutions/smallest_multiple.rs)|
|[6](https://projecteuler.net/problem=6)|[`sum_square_difference.rs`](src/solutions/sum_square_difference.rs)|
|[7](https://projecteuler.net/problem=7)|[`ten_thousand_and_first_prime.rs`](src/solutions/ten_thousand_and_first_prime.rs)|
|[8](https://projecteuler.net/problem=8)|[`largest_product_in_a_series.rs`](src/solutions/largest_product_in_a_series.rs)|
|[9](https://projecteuler.net/problem=9)|[`special_pythagorean_triplet.rs`](src/solutions/special_pythagorean_triplet.rs)|
|[10](https://projecteuler.net/problem=10)|[`summation_of_primes.rs`](src/solutions/summation_of_primes.rs)|
|[11](https://projecteuler.net/problem=11)|[`largest_product_in_a_grid.rs`](src/solutions/largest_product_in_a_grid.rs)|
|[12](https://projecteuler.net/problem=12)|[`highly_divisible_triangular_number.rs`](src/solutions/highly_divisible_triangular_number.rs)|
|[13](https://projecteuler.net/problem=13)|[`large_sum.rs`](src/solutions/large_sum.rs)|
|[14](https://projecteuler.net/problem=14)|[`longest_collatz_sequence.rs`](src/solutions/longest_collatz_sequence.rs)|
|[15](https://projecteuler.net/problem=15)|[`lattice_paths.rs`](src/solutions/lattice_paths.rs)|
|[16](https://projecteuler.net/problem=16)|[`power_digit_sum.rs`](src/solutions/power_digit_sum.rs)|
|[17](https://projecteuler.net/problem=17)|[`number_letter_counts.rs`](src/solutions/number_letter_counts.rs)|
|[18](https://projecteuler.net/problem=18)|[`maximum_path_sum_i.rs`](src/solutions/maximum_path_sum_i.rs)|
|[19](https://projecteuler.net/problem=19)|[`counting_sundays.rs`](src/solutions/counting_sundays.rs)|
|[20](https://projecteuler.net/problem=20)|[`factorial_digit_sum.rs`](src/solutions/factorial_digit_sum.rs)|
|[21](https://projecteuler.net/problem=21)|[`amicable_numbers.rs`](src/solutions/amicable_numbers.rs)|
|[22](https://projecteuler.net/problem=22)|[`names_scores.rs`](src/solutions/names_scores.rs)|
|[23](https://projecteuler.net/problem=23)|[`non_abundant_sums.rs`](src/solutions/non_abundant_sums.rs)|
|[24](https://projecteuler.net/problem=24)|[`lexicographic_permutations.rs`](src/solutions/lexicographic_permutations.rs)|
|[25](https://projecteuler.net/problem=25)|[`thousand_digit_fibonacci_number.rs`](src/solutions/thousand_digit_fibonacci_number.rs)|
|[26](https://projecteuler.net/problem=26)|[`reciprocal_cycles.rs`](src/solutions/reciprocal_cycles.rs)|
|[27](https://projecteuler.net/problem=27)|[`quadratic_primes.rs`](src/solutions/quadratic_primes.rs)|
|[28](https://projecteuler.net/problem=28)|[`number_spiral_diagonals.rs`](src/solutions/number_spiral_diagonals.rs)|
|[29](https://projecteuler.net/problem=29)|[`distinct_powers.rs`](src/solutions/distinct_powers.rs)|
|[30](https://projecteuler.net/problem=30)|[`digit_fifth_powers.rs`](src/solutions/digit_fifth_powers.rs)|
|[31](https://projecteuler.net/problem=31)|[`coin_sums.rs`](src/solutions/coin_sums.rs)|
|[32](https://projecteuler.net/problem=32)|[`pandigital_products.rs`](src/solutions/pandigital_products.rs)|
|[33](https://projecteuler.net/problem=33)|[`digit_cancelling_fractions.rs`](src/solutions/digit_cancelling_fractions.rs)|
|[34](https://projecteuler.net/problem=34)|[`digit_factorials.rs`](src/solutions/digit_factorials.rs)|
|[35](https://projecteuler.net/problem=35)|[`circular_primes.rs`](src/solutions/circular_primes.rs)|
|[36](https://projecteuler.net/problem=36)|[`double_base_palindromes.rs`](src/solutions/double_base_palindromes.rs)|
|[37](https://projecteuler.net/problem=37)|[`truncatable_primes.rs`](src/solutions/truncatable_primes.rs)|
|[38](https://projecteuler.net/problem=38)|[`pandigital_multiples.rs`](src/solutions/pandigital_multiples.rs)|
|[39](https://projecteuler.net/problem=39)|[`integer_right_triangles.rs`](src/solutions/integer_right_triangles.rs)|
|[40](https://projecteuler.net/problem=40)|[`champernownes_constant.rs`](src/solutions/champernownes_constant.rs)|
|[41](https://projecteuler.net/problem=41)|[`pandigital_prime.rs`](src/solutions/pandigital_prime.rs)|
|[42](https://projecteuler.net/problem=42)|[`coded_triangle_numbers.rs`](src/solutions/coded_triangle_numbers.rs)|
|[43](https://projecteuler.net/problem=43)|[`sub_string_divisibility.rs`](src/solutions/sub_string_divisibility.rs)|
|[44](https://projecteuler.net/problem=44)|[`pentagon_numbers.rs`](src/solutions/pentagon_numbers.rs)|
|[45](https://projecteuler.net/problem=45)|[`triangular_pentagonal_and_hexagonal.rs`](src/solutions/triangular_pentagonal_and_hexagonal.rs)|
|[46](https://projecteuler.net/problem=46)|[`goldbachs_other_conjecture.rs`](src/solutions/goldbachs_other_conjecture.rs)|
|[47](https://projecteuler.net/problem=47)|[`distinct_primes_factors.rs`](src/solutions/distinct_primes_factors.rs)|
|[48](https://projecteuler.net/problem=48)|[`self_powers.rs`](src/solutions/self_powers.rs)|
|[49](https://projecteuler.net/problem=49)|[`prime_permutations.rs`](src/solutions/prime_permutations.rs)|
|[50](https://projecteuler.net/problem=50)|[`consecutive_prime_sum.rs`](src/solutions/consecutive_prime_sum.rs)|
|[51](https://projecteuler.net/problem=51)|[`prime_digit_replacements.rs`](src/solutions/prime_digit_replacements.rs)|
|[52](https://projecteuler.net/problem=52)|[`permuted_multiples.rs`](src/solutions/permuted_multiples.rs)|
|[53](https://projecteuler.net/problem=53)|[`combinatoric_selections.rs`](src/solutions/combinatoric_selections.rs)|
|[54](https://projecteuler.net/problem=54)|[`poker_hands.rs`](src/solutions/poker_hands.rs)|
|[55](https://projecteuler.net/problem=55)|[`lychrel_numbers.rs`](src/solutions/lychrel_numbers.rs)|
|[56](https://projecteuler.net/problem=56)|[`powerful_digit_sum.rs`](src/solutions/powerful_digit_sum.rs)|
|[57](https://projecteuler.net/problem=57)|[`square_root_convergents.rs`](src/solutions/square_root_convergents.rs)|
|[58](https://projecteuler.net/problem=58)|[`spiral_primes.rs`](src/solutions/spiral_primes.rs)|
|[59](https://projecteuler.net/problem=59)|[`xor_decryption.rs`](src/solutions/xor_decryption.rs)|
|[61](https://projecteuler.net/problem=61)|[`cyclical_figurate_numbers.rs`](src/solutions/cyclical_figurate_numbers.rs)|
|[62](https://projecteuler.net/problem=62)|[`cubic_permutations.rs`](src/solutions/cubic_permutations.rs)|
|[63](https://projecteuler.net/problem=63)|[`powerful_digit_counts.rs`](src/solutions/powerful_digit_counts.rs)|
|[64](https://projecteuler.net/problem=64)|[`odd_period_square_roots.rs`](src/solutions/odd_period_square_roots.rs)|
|[65](https://projecteuler.net/problem=65)|[`convergents_of_e.rs`](src/solutions/convergents_of_e.rs)|
|[66](https://projecteuler.net/problem=66)|[`diophantine_equation.rs`](src/solutions/diophantine_equation.rs)|
|[67](https://projecteuler.net/problem=67)|[`maximum_path_sum_ii.rs`](src/solutions/maximum_path_sum_ii.rs)|
|[68](https://projecteuler.net/problem=68)|[`magic_5_gon_ring.rs`](src/solutions/magic_5_gon_ring.rs)|
|[69](https://projecteuler.net/problem=69)|[`totient_maximum.rs`](src/solutions/totient_maximum.rs)|
|[71](https://projecteuler.net/problem=71)|[`ordered_fractions.rs`](src/solutions/ordered_fractions.rs)|
|[72](https://projecteuler.net/problem=72)|[`counting_fractions.rs`](src/solutions/counting_fractions.rs)|
|[74](https://projecteuler.net/problem=74)|[`digit_factorial_chains.rs`](src/solutions/digit_factorial_chains.rs)|
|[75](https://projecteuler.net/problem=75)|[`singular_integer_right_triangles.rs`](src/solutions/singular_integer_right_triangles.rs)|
|[76](https://projecteuler.net/problem=76)|[`counting_summations.rs`](src/solutions/counting_summations.rs)|
|[77](https://projecteuler.net/problem=77)|[`prime_summations.rs`](src/solutions/prime_summations.rs)|
|[78](https://projecteuler.net/problem=78)|[`coin_partitions.rs`](src/solutions/coin_partitions.rs)|
|[81](https://projecteuler.net/problem=81)|[`path_sum_two_ways.rs`](src/solutions/path_sum_two_ways.rs)|
|[85](https://projecteuler.net/problem=85)|[`counting_rectangles.rs`](src/solutions/counting_rectangles.rs)|
|[87](https://projecteuler.net/problem=87)|[`prime_power_triples.rs`](src/solutions/prime_power_triples.rs)|
|[92](https://projecteuler.net/problem=92)|[`square_digit_chains.rs`](src/solutions/square_digit_chains.rs)|
|[97](https://projecteuler.net/problem=97)|[`large_non_mersenne_prime.rs`](src/solutions/large_non_mersenne_prime.rs)|
|[99](https://projecteuler.net/problem=99)|[`largest_exponential.rs`](src/solutions/largest_exponential.rs)|