{"id":39461558,"url":"https://github.com/tfpf/project-euler","last_synced_at":"2026-01-18T04:43:40.447Z","repository":{"id":204873010,"uuid":"621650480","full_name":"tfpf/project-euler","owner":"tfpf","description":"My solutions to some Project Euler problems. Emphasis on elegance (where possible) and performance.","archived":false,"fork":false,"pushed_at":"2024-08-22T08:42:35.000Z","size":802,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-08-23T08:36:03.260Z","etag":null,"topics":["prime-generator","prime-sieve","project-euler","project-euler-rust-solutions","project-euler-solutions","sieve-of-atkin"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tfpf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-31T05:16:50.000Z","updated_at":"2024-08-22T08:42:36.000Z","dependencies_parsed_at":"2023-11-07T17:48:56.987Z","dependency_job_id":"ddf23155-7e54-49df-8752-78e95bae3536","html_url":"https://github.com/tfpf/project-euler","commit_stats":null,"previous_names":["tfpf/project-euler"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tfpf/project-euler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fproject-euler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fproject-euler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fproject-euler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fproject-euler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tfpf","download_url":"https://codeload.github.com/tfpf/project-euler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tfpf%2Fproject-euler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28530067,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["prime-generator","prime-sieve","project-euler","project-euler-rust-solutions","project-euler-solutions","sieve-of-atkin"],"created_at":"2026-01-18T04:43:39.792Z","updated_at":"2026-01-18T04:43:40.439Z","avatar_url":"https://github.com/tfpf.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project Euler\nTrying my hand at [Project Euler](https://projecteuler.net) as I stumble along learning Rust. I shall only add the\nsolutions to the first hundred problems here with the intention being to showcase whatever useful data structures I\nbuild along the way. (This is permitted according to the Project Euler guidelines.) Further, I shall restrict myself to\nthe standard library.\n\n[![style](https://github.com/tfpf/project-euler/actions/workflows/style.yml/badge.svg)](https://github.com/tfpf/project-euler/actions/workflows/style.yml)\n[![lint](https://github.com/tfpf/project-euler/actions/workflows/lint.yml/badge.svg)](https://github.com/tfpf/project-euler/actions/workflows/lint.yml)\n[![sanity](https://github.com/tfpf/project-euler/actions/workflows/sanity.yml/badge.svg)](https://github.com/tfpf/project-euler/actions/workflows/sanity.yml)\n[![tests](https://github.com/tfpf/project-euler/actions/workflows/tests.yml/badge.svg)](https://github.com/tfpf/project-euler/actions/workflows/tests.yml)\n\nTo solve, say, problem 16, enter the following command.\n\n```sh\ncargo r 16\n```\n\nRun it without arguments to sequentially solve all problems for which I have written solutions.\n\n```sh\ncargo r\n```\n\nMost solutions are rather concise; the heavy lifting is done in the `utils` module. This highlights the intent of the\ncode by hiding confounding implementation details. Items of particular note therein are the following.\n* `is_prime`: fast prime checker which combines trial division and the Miller-Rabin algorithm.\n* `pow`: modular exponentiation calculator, emulating the `pow` function of Python.\n* `Long`: arbitrary-precision integer type with support for addition and multiplication.\n  * `Long::factorial`: factorial calculator.\n  * `Long::pow`: exponentiation calculator.\n* `SieveOfAtkin`: fast prime-generating sieve.\n  [The sieve of Atkin is faster than the sieve of Eratosthenes.](https://github.com/tfpf/sieve-of-atkin)\n  * `SieveOfAtkin::is_prime`: prime checker for numbers the sieve is generated up to.\n  * `SieveOfAtkin::iter`: iterator over generated primes.\n* `Polygonal`: figurate (triangle, quadrilateral, pentagon, hexagon, …) number generator. Uses only additions and\n  subtractions.\n  * `Polygonal::invert`: figurate number checker.\n* `PythagoreanTriplets`: Pythagorean triplets generator.\n\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"res/certified_human.svg\" /\u003e\n\u003c/p\u003e\n\nNo part of the code in this repository has been written by or in consultation with artificial intelligence chatbots\nsuch as (but not limited to) Bard and ChatGPT.\n\n## Problems and Solutions\n|Problem|Solution|\n|-:|:-:|\n|[1](https://projecteuler.net/problem=1)|[`multiples_of_3_or_5.rs`](src/solutions/multiples_of_3_or_5.rs)|\n|[2](https://projecteuler.net/problem=2)|[`even_fibonacci_numbers.rs`](src/solutions/even_fibonacci_numbers.rs)|\n|[3](https://projecteuler.net/problem=3)|[`largest_prime_factor.rs`](src/solutions/largest_prime_factor.rs)|\n|[4](https://projecteuler.net/problem=4)|[`largest_palindrome_product.rs`](src/solutions/largest_palindrome_product.rs)|\n|[5](https://projecteuler.net/problem=5)|[`smallest_multiple.rs`](src/solutions/smallest_multiple.rs)|\n|[6](https://projecteuler.net/problem=6)|[`sum_square_difference.rs`](src/solutions/sum_square_difference.rs)|\n|[7](https://projecteuler.net/problem=7)|[`ten_thousand_and_first_prime.rs`](src/solutions/ten_thousand_and_first_prime.rs)|\n|[8](https://projecteuler.net/problem=8)|[`largest_product_in_a_series.rs`](src/solutions/largest_product_in_a_series.rs)|\n|[9](https://projecteuler.net/problem=9)|[`special_pythagorean_triplet.rs`](src/solutions/special_pythagorean_triplet.rs)|\n|[10](https://projecteuler.net/problem=10)|[`summation_of_primes.rs`](src/solutions/summation_of_primes.rs)|\n|[11](https://projecteuler.net/problem=11)|[`largest_product_in_a_grid.rs`](src/solutions/largest_product_in_a_grid.rs)|\n|[12](https://projecteuler.net/problem=12)|[`highly_divisible_triangular_number.rs`](src/solutions/highly_divisible_triangular_number.rs)|\n|[13](https://projecteuler.net/problem=13)|[`large_sum.rs`](src/solutions/large_sum.rs)|\n|[14](https://projecteuler.net/problem=14)|[`longest_collatz_sequence.rs`](src/solutions/longest_collatz_sequence.rs)|\n|[15](https://projecteuler.net/problem=15)|[`lattice_paths.rs`](src/solutions/lattice_paths.rs)|\n|[16](https://projecteuler.net/problem=16)|[`power_digit_sum.rs`](src/solutions/power_digit_sum.rs)|\n|[17](https://projecteuler.net/problem=17)|[`number_letter_counts.rs`](src/solutions/number_letter_counts.rs)|\n|[18](https://projecteuler.net/problem=18)|[`maximum_path_sum_i.rs`](src/solutions/maximum_path_sum_i.rs)|\n|[19](https://projecteuler.net/problem=19)|[`counting_sundays.rs`](src/solutions/counting_sundays.rs)|\n|[20](https://projecteuler.net/problem=20)|[`factorial_digit_sum.rs`](src/solutions/factorial_digit_sum.rs)|\n|[21](https://projecteuler.net/problem=21)|[`amicable_numbers.rs`](src/solutions/amicable_numbers.rs)|\n|[22](https://projecteuler.net/problem=22)|[`names_scores.rs`](src/solutions/names_scores.rs)|\n|[23](https://projecteuler.net/problem=23)|[`non_abundant_sums.rs`](src/solutions/non_abundant_sums.rs)|\n|[24](https://projecteuler.net/problem=24)|[`lexicographic_permutations.rs`](src/solutions/lexicographic_permutations.rs)|\n|[25](https://projecteuler.net/problem=25)|[`thousand_digit_fibonacci_number.rs`](src/solutions/thousand_digit_fibonacci_number.rs)|\n|[26](https://projecteuler.net/problem=26)|[`reciprocal_cycles.rs`](src/solutions/reciprocal_cycles.rs)|\n|[27](https://projecteuler.net/problem=27)|[`quadratic_primes.rs`](src/solutions/quadratic_primes.rs)|\n|[28](https://projecteuler.net/problem=28)|[`number_spiral_diagonals.rs`](src/solutions/number_spiral_diagonals.rs)|\n|[29](https://projecteuler.net/problem=29)|[`distinct_powers.rs`](src/solutions/distinct_powers.rs)|\n|[30](https://projecteuler.net/problem=30)|[`digit_fifth_powers.rs`](src/solutions/digit_fifth_powers.rs)|\n|[31](https://projecteuler.net/problem=31)|[`coin_sums.rs`](src/solutions/coin_sums.rs)|\n|[32](https://projecteuler.net/problem=32)|[`pandigital_products.rs`](src/solutions/pandigital_products.rs)|\n|[33](https://projecteuler.net/problem=33)|[`digit_cancelling_fractions.rs`](src/solutions/digit_cancelling_fractions.rs)|\n|[34](https://projecteuler.net/problem=34)|[`digit_factorials.rs`](src/solutions/digit_factorials.rs)|\n|[35](https://projecteuler.net/problem=35)|[`circular_primes.rs`](src/solutions/circular_primes.rs)|\n|[36](https://projecteuler.net/problem=36)|[`double_base_palindromes.rs`](src/solutions/double_base_palindromes.rs)|\n|[37](https://projecteuler.net/problem=37)|[`truncatable_primes.rs`](src/solutions/truncatable_primes.rs)|\n|[38](https://projecteuler.net/problem=38)|[`pandigital_multiples.rs`](src/solutions/pandigital_multiples.rs)|\n|[39](https://projecteuler.net/problem=39)|[`integer_right_triangles.rs`](src/solutions/integer_right_triangles.rs)|\n|[40](https://projecteuler.net/problem=40)|[`champernownes_constant.rs`](src/solutions/champernownes_constant.rs)|\n|[41](https://projecteuler.net/problem=41)|[`pandigital_prime.rs`](src/solutions/pandigital_prime.rs)|\n|[42](https://projecteuler.net/problem=42)|[`coded_triangle_numbers.rs`](src/solutions/coded_triangle_numbers.rs)|\n|[43](https://projecteuler.net/problem=43)|[`sub_string_divisibility.rs`](src/solutions/sub_string_divisibility.rs)|\n|[44](https://projecteuler.net/problem=44)|[`pentagon_numbers.rs`](src/solutions/pentagon_numbers.rs)|\n|[45](https://projecteuler.net/problem=45)|[`triangular_pentagonal_and_hexagonal.rs`](src/solutions/triangular_pentagonal_and_hexagonal.rs)|\n|[46](https://projecteuler.net/problem=46)|[`goldbachs_other_conjecture.rs`](src/solutions/goldbachs_other_conjecture.rs)|\n|[47](https://projecteuler.net/problem=47)|[`distinct_primes_factors.rs`](src/solutions/distinct_primes_factors.rs)|\n|[48](https://projecteuler.net/problem=48)|[`self_powers.rs`](src/solutions/self_powers.rs)|\n|[49](https://projecteuler.net/problem=49)|[`prime_permutations.rs`](src/solutions/prime_permutations.rs)|\n|[50](https://projecteuler.net/problem=50)|[`consecutive_prime_sum.rs`](src/solutions/consecutive_prime_sum.rs)|\n|[51](https://projecteuler.net/problem=51)|[`prime_digit_replacements.rs`](src/solutions/prime_digit_replacements.rs)|\n|[52](https://projecteuler.net/problem=52)|[`permuted_multiples.rs`](src/solutions/permuted_multiples.rs)|\n|[53](https://projecteuler.net/problem=53)|[`combinatoric_selections.rs`](src/solutions/combinatoric_selections.rs)|\n|[54](https://projecteuler.net/problem=54)|[`poker_hands.rs`](src/solutions/poker_hands.rs)|\n|[55](https://projecteuler.net/problem=55)|[`lychrel_numbers.rs`](src/solutions/lychrel_numbers.rs)|\n|[56](https://projecteuler.net/problem=56)|[`powerful_digit_sum.rs`](src/solutions/powerful_digit_sum.rs)|\n|[57](https://projecteuler.net/problem=57)|[`square_root_convergents.rs`](src/solutions/square_root_convergents.rs)|\n|[58](https://projecteuler.net/problem=58)|[`spiral_primes.rs`](src/solutions/spiral_primes.rs)|\n|[59](https://projecteuler.net/problem=59)|[`xor_decryption.rs`](src/solutions/xor_decryption.rs)|\n|[61](https://projecteuler.net/problem=61)|[`cyclical_figurate_numbers.rs`](src/solutions/cyclical_figurate_numbers.rs)|\n|[62](https://projecteuler.net/problem=62)|[`cubic_permutations.rs`](src/solutions/cubic_permutations.rs)|\n|[63](https://projecteuler.net/problem=63)|[`powerful_digit_counts.rs`](src/solutions/powerful_digit_counts.rs)|\n|[64](https://projecteuler.net/problem=64)|[`odd_period_square_roots.rs`](src/solutions/odd_period_square_roots.rs)|\n|[65](https://projecteuler.net/problem=65)|[`convergents_of_e.rs`](src/solutions/convergents_of_e.rs)|\n|[66](https://projecteuler.net/problem=66)|[`diophantine_equation.rs`](src/solutions/diophantine_equation.rs)|\n|[67](https://projecteuler.net/problem=67)|[`maximum_path_sum_ii.rs`](src/solutions/maximum_path_sum_ii.rs)|\n|[68](https://projecteuler.net/problem=68)|[`magic_5_gon_ring.rs`](src/solutions/magic_5_gon_ring.rs)|\n|[69](https://projecteuler.net/problem=69)|[`totient_maximum.rs`](src/solutions/totient_maximum.rs)|\n|[71](https://projecteuler.net/problem=71)|[`ordered_fractions.rs`](src/solutions/ordered_fractions.rs)|\n|[72](https://projecteuler.net/problem=72)|[`counting_fractions.rs`](src/solutions/counting_fractions.rs)|\n|[74](https://projecteuler.net/problem=74)|[`digit_factorial_chains.rs`](src/solutions/digit_factorial_chains.rs)|\n|[75](https://projecteuler.net/problem=75)|[`singular_integer_right_triangles.rs`](src/solutions/singular_integer_right_triangles.rs)|\n|[76](https://projecteuler.net/problem=76)|[`counting_summations.rs`](src/solutions/counting_summations.rs)|\n|[77](https://projecteuler.net/problem=77)|[`prime_summations.rs`](src/solutions/prime_summations.rs)|\n|[78](https://projecteuler.net/problem=78)|[`coin_partitions.rs`](src/solutions/coin_partitions.rs)|\n|[81](https://projecteuler.net/problem=81)|[`path_sum_two_ways.rs`](src/solutions/path_sum_two_ways.rs)|\n|[85](https://projecteuler.net/problem=85)|[`counting_rectangles.rs`](src/solutions/counting_rectangles.rs)|\n|[87](https://projecteuler.net/problem=87)|[`prime_power_triples.rs`](src/solutions/prime_power_triples.rs)|\n|[92](https://projecteuler.net/problem=92)|[`square_digit_chains.rs`](src/solutions/square_digit_chains.rs)|\n|[97](https://projecteuler.net/problem=97)|[`large_non_mersenne_prime.rs`](src/solutions/large_non_mersenne_prime.rs)|\n|[99](https://projecteuler.net/problem=99)|[`largest_exponential.rs`](src/solutions/largest_exponential.rs)|\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfpf%2Fproject-euler","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftfpf%2Fproject-euler","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftfpf%2Fproject-euler/lists"}