cirosantilli/project-euler-solutions

Python solutions to ALL Project Euler problems, mostly using LLMs to generate the bulk of the solutions. Extension goal: formally proven Lean solutions to 1-100.

★ 11Forks 5PythonGitHub ↗Compare

Project website ↗

project-eulerproject-euler-solutions

README

Project Euler Solutions

This repo aims to solve ALL Project Euler problems in openly licensed Python code, mostly using LLMs to generate the bulk of the solutions. Status:

  • 1-1009: done

Tested on Python 3.13.7, PyPy 7.3.20, Ubuntu 25.10.

Ridiculous stretch goal: solve the first 100 problems in Lean with mathematically proven correctness! Status: TBD.

logo
Figure 1. Portrait of Leonard Euler by Jakob Emanuel Handmann c.1756 with Deal With It meme sunglasses added on it by ChatGPT with prompt "Extract bust and add meme sunglasses."

Before this repo was published, there were a few solution collections out there such as:

but we couldn’t find any complete ones, and the reason is obvious: before LLMs were able to solve most of the problems, there was no single human who had both the patience and the willingness to spoil problems and get banned from the leaderboards forever: once you publish any solution online, they hunt you down and forever block any account they manage to match back to you, even though LLMs now solve all their recent problems. The existing solution repos were also partially a showcase of users’s skills rather than pure a mass collaborative effort to just get it done. Contributors of this project however have attained Buddhahood and completely freed themselves of their own ego: we do stupid things and we are not proud. As such, we have come closer to the more fundamental reason for doing PE problems: autism.

Not long after this repo was published, https://eulersolve.org/ was also published, which also contained all solutions to date. That repo has valuable content, but it’s license is not fully open, see further comments at: Section 9.2.2, “eulersolve.org”.

We also have https://github.com/lucky-bai/projecteuler-solutions which contains the numerical solutions. And of course, once you have the numerical solution you can enter the private forum threads where people freely share their solutions. But they don’t use open licenses, so we can’t republish them openly.

At least initially, we are not going to restrict ourselves only to LLM solutions, or attempt to carefully benchmark LLM capability with this repo. If one problem is hard and we manually find a solution, it is fine to add it manually. It is also fine to raid the private Project Euler forums to understand the key tricks and feed insights to LLMs (though we must never ever touch code from there), since mathematical ideas themselves cannot be copyrighted. The initial goal is just to have all solvers legally with as little effort and money as possible. Editing LLM output to make it work in any way is also OK.

The main reasons for creating this repo are:

  • let people and LLMs get solutions without wasting more GPUs

  • pissing off Project Euler people who say solutions must not be published

  • beauty

  • get a feeling for how much LLMs cost vs how powerful they are for hard but non-frontier tasks

Of course, it can be argued that https://github.com/eth-sri/matharena infrastructure does everything that this repository does and more, but because we focus solely on Project Euler and openly give answers, our repo can be cuter. Also they are not trying to do the older ones like we are.

We are focusing on Python solutions at first because this is the language that LLMs seems to speak better. It is also cute and avoid compilation overhead. Also pypy3 does a lot to bring runtime closer to that of compiled languages. We are not against adding solutions in every single language in existence in the future, but that is becoming increasingly cheap and easy with vibe translation with Codex CLI, so we are not too concerned either.

May this repo free unsuspecting nerds from the ambition to solve some useless problems. You need to pick something even harder to do now.

Each Python solution file should be completely self contained and have no dependencies outside of the Python standard library.

Solutions must run on a single CPU core, multithreading or accelerators like GPUs are not allowed. The reason to forbid multithreading is so as to put greater focus on algorithmic improvements rather than micro-optimizations and hardware parallelism. Yes, serial execution speed on a single core varies across CPUs, but parallel execution varies much more even across CPUs. So having everything on a single core makes it much easier to estimate algorithm quality even across CPUs.

We are initially striving strongly for a 10 minute maximum runtime of each solution. This number is semi arbitrary, but it feels like a ridiculously high ceiling above which a non-bruteforce algorithm with the key insight should never ever go above, and we are yet to see a compelling case of the contrary. A few seconds is much much more common and pleasant. One minute starts to feel bad. Five is already basically hopeless. So ten feels like beyond reasonable. The slowest known solvers are listed at: Slowest solvers.

We want to avoid any magic pre-computed constants used as intermediate results as much as possible, and especially large precomputed number tables. Ideally the program should compute anything it needs from scratch. Well known mathematical constants that appear in the Python stlib like Pi are fine though. One particular example of what to avoid is hardcoding OEIS sequences: it is fine to know about them and mention them in comments, but the final code should calculate them from scratch. This is hard to enforce this rule automatically except in the case where large precomputed tables are present and the file becomes huge. But we will do our best. The following simple numerical-consts.sh helper lists files sorted by those having the most hardcoded constants in them and can help find such failures:

./numerical-consts.sh

There are currently no known solvers with ugly precomputed results which should be removed.

Circa problem 1000 we tend to get by simply on Codex CLI with prompt:

/goal Fetch all latest unsolved problems from https://projecteuler.net/recent and solve them in Python. Test with pypy3 and be mindful not to blow our system memory again.. Run ./test.py -A on those problems and ensure it does not blow up. "error: missing reference answer" is fine, don't attempt to correct that.

and giving it Internet access to projecteuler.net to ensure it can get the latest problem and their resources: https://stackoverflow.com/questions/79970154/how-to-allow-codex-cli-to-execute-shell-commands-with-internet-access-from-withi

Or if you want to save some Codex credits, we’ve also managed directly on web with:

Solve all latest project euler problems missing from cirosantilli/project-euler-solutionsGive me the .py and .md file I can drop there.

After trying more automated approaches which failed due to reliability/cost issues, we ended up painstakingly (but also meditatively) doing at least a single pass of "paste on chatgpt.com", which solves 90% of them. When that fails the algorithm is a mixture of:

  • Codex locally with generate-solvers.py --codex N. Sometimes works.

  • raid the forum for insight

The above was after we have vibe ported all solutions from the following repositories into this one with Codex CLI, both of which are CC0:

Here is a description of how we previously tried to more automatically tackle things but mostly failed:

  • generate-solvers.py managed to solve 1-100 for very little money, but then quickly spent 20 dollars on the API to try and solve 101-200 with GPT-5.2. We didn’t limit output tokens per prompt however, so it is possible that a small number of tasks took up all the tokens.

    We then tried to load up 10$ and see if I could solve any unsolved problems above 200 on API with:

    ./generate-solvers.py --max-output-tokens 50000 --model gpt-5.2 202 210 212

    but that ate up 7$ and ended up in three timeouts thus wasting most of my money. So I’m never trying to use this shitty API again. Plus plan Web UI solved all three immediately after.

  • generate-solvers.py --codex managed to solve 400-413, but it is slow and then it hit the 5 hour usage limit on my Plus plan.

  • https://chatgpt.com web UI: GPT-5.2 models seem to easily solve all the old problems when I ask for it on the , it’s just that the API feels way more expensive. Maybe this is just an illusion as we start to hit web UI limits as well later on. But if those are not hit, worse case we could solve all problems by manually copy pasting on web UI, it’s then just a matter of kicking it repeatedly until it gives the results.

virtualenv -p python3 .venv
. .venv/bin/activate

generate-solvers.py attempts to generate solvers via OpenAI API.

Try to generate solvers for problem 420 with the OpenAI API:

./generate-solvers.py 420

The program hangs until all tasks are done. This may take a while, 10-15 mins is common. If successful, solvers are stored under solvers

Same but for problems 420to 430:

./generate-solvers.py --max-output-tokens 10000 420 430

--max-output-tokens and smaller batches are highly recommended to gage how much you are likely to spend per solution on average, otherwise it is easy to run out of API credits.

Another thing you can try is to pick a cheaper model to see if it also solves some given problems for way less money:

./generate-solvers.py --max-output-tokens 10000 --model gpt-5-mini 200

202, 210 and 212 failed to solve however with this.

Same but in batch mode, which is about 2x cheaper but may take up to 24 hours to complete:

./generate-solvers.py --max-output-tokens 10000 --batch 420 430

With --codex, generate-solvers.py attempts to generate solvers by running Codex on your local machine + its API calls. Sample usage:

./generate-solvers.py --codex 245

TODO: output_tokens not showing up correctly in the JSON.

This is a decent prompt template:

Solve project euler 245 in file main.py. Don't use any external libraries. Add asserts to any test values given in the problem statement. Also produce a markdown summary of the main techniques used as README.md. Provide the two files both inline here and with download links. Any known final answer must not appear anywhere in the generated files, don't assert that value only print it.

For new problems that come out:

Solve the following problem in file main.py. Don't use any external libraries. Add asserts to any test values given in the problem statement. Also produce a markdown summary of the main techniques used as README.md. Provide the two files both inline here and with download links. Any known final answer must not appear anywhere in the generated files, don't assert that value only print it.

If you are running a few of those you can more easily

Run just one manually solver solvers/400.py:

pypy3 solvers/400.py

A small number of the earlier problems actually need input data from a separate file, to run those manually you also need to cd into the directory that contains them first e.g. for solvers/22.py:

cd data/project-euler-statements/data/documents
pypy3 ../../../../solvers/22.py

Each solver should print the final solution to stdout and nothing else.

They should also assert any other given test values to increase the probability that the solver is actually correct.

Run all solvers and check for correctness against the numerical solutions published at lucky-bai/projecteuler-solutions:

./test.py

Same for one specific solver:

./test.py 400

Same for an inclusive range of solvers:

./test.py 400-410

Set timeout in seconds under which solvers must run with -t. The default value is 600. Having a timeout is useful when trying several solvers for the first time before you know if they are correct or not:

./test.py -t60 400-410

Solvers that fail to terminated under that time fail with something like:

| link:solvers/141.py[141] |  |  |  | timed out after 60.000s

One extremely convenient automation to ./test.py is the -A --autoupdate flag which automatically updates this README with updated results as tests are run, saving you a lot of copy paste:

| link:solvers/141.py[141] |  |  |  | timed out after 60.000s
./test.py -A -t60 400-410

Benchmark Python solvers from another directory without changing the default ./test.py suite by using --set. The flag is repeatable, which is useful for comparing this repository against another solver set:

./test.py --set solvers/eulersolve 1-10
./test.py --set solvers --set solvers/eulersolve 1-10

With -A, solver timings are recorded in benchmark.yaml and in the [other-solvers] comparison list. Timings with missing reference answers are kept as unverified timings; existing solvers that fail or produce incorrect answers are recorded with an `error: ` entry in the comparison list.

We have basic linting with lint.py:

./lint.py

This script checks that output answers don’t show up in implementations to help prevent cheating by directly printing or returning hardcoded values. Those answer leaks and forbidden source tokens are critical lint failures. It also warns when Python solvers in solvers/ do not start with #!/usr/bin/env python.

Note that this linting does not affect languages where you can actually formally prove your algorithm such as Lean. That’s their beauty!

When run directly, lint.py exits non-zero for both critical and non-critical findings. The functionality is also automatically called from test.py, where critical lint failures stop execution before running solvers, while non-critical warnings are reported without blocking execution or README autoupdates.

Of course, this does not rule out malice entirely, an evil LLM could simply obfuscate the cheating with string concatenation or addition. But this already greatly reduces the chances. There is only one solution to this problem: Lean or other formal proof systems.

In the age of LLM code generation, autoformaters have become even sweeter:

./format-py
black .
./format_md.py

We have basic support for solvers written in multiple languages.

While the main goal of the repository is to have Python solutions, we couldn’t resist generalizing things a bit for Lean. But it is also interesting to have multilanguage support to compare implementation speed across different languages.

For most compiled languages such as C and C++, you first have to compile the examples. From inside solvers/:

cd solvers

you can build example with commands such as:

  • make: build all compiled examples

  • make c: build all compiled C examples

  • make 1_c.out: build just example 1 in language C

Some languages may not have make support and require more specialized builds, this is notable the case for Lean currently.

By default running:

./test.py 1

runs all solvers found for that given problem. If any compiled solvers have not been compiled, they are simply skipped.

Run only the selected languages with the -l flag:

./test.py -l c -l py 1

You can also run a solver of a specific language with the more intuitive syntax:

./test.py 1.cpp

Results for non-Python solvers can be seen at: [other-solvers].

One massive stretch goal of this project is to have formal lean proofs of the Lean solutions.

  • 1-10: done

  • 11-20: 1/10 (TODO: 11, 12, 14, 15, 16, 17, 18, 19, 20)

  • 21-30: 0/10 (TODO: 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)

  • 31-40: 0/10 (TODO: 31, 32, 33, 34, 35, 36, 37, 38, 39, 40)

  • 41-50: 0/10 (TODO: 41, 42, 43, 44, 45, 46, 47, 48, 49, 50)

  • 51-60: 0/10 (TODO: 51, 52, 53, 54, 55, 56, 57, 58, 59, 60)

  • 61-70: 0/10 (TODO: 61, 62, 63, 64, 65, 66, 67, 68, 69, 70)

  • 71-80: 0/10 (TODO: 71, 72, 73, 74, 75, 76, 77, 78, 79, 80)

  • 81-90: 0/10 (TODO: 81, 82, 83, 84, 85, 86, 87, 88, 89, 90)

  • 91-100: 0/10 (TODO: 91, 92, 93, 94, 95, 96, 97, 98, 99, 100)

Lean is an automated theorem checker that doubles as a programming language, so as long as we get the formalization of the problem statement right, Lean will ensure that the final algorithm is correct. Notably this ensures that the LLM didn’t cheat and found a flawed algorithm which happens to work by chance or malice only on certain cases.

Probably the proofs will come down to proofs that the bruteforce solution function is equivalent to the insight-optimized one that you need to have reasonable runtime, but we will see how it goes.

The plan is to vibe-translate Python to lean without proof initially, and then starting adding proofs little by little. We need to see get a feel for how automatable that will be! There are a bunch of autoformalizatoin and automatic proof companies out there right now, so this will be a perfect chance to try them out.

There are two ways to run the Lean program of this repo:

  • you can convert them to executables just as for .c or .cpp files

  • or you can run them directly with lean

and it is only the second method which will run the actual proofs.

To run first setup Lean with:

curl https://elan.lean-lang.org/elan-init.sh -sSf | sh
source $HOME/.elan/env

Then build all executables and check all proofs with:

lake -R build

and then you can run the generated executables with:

solvers/1_lean.out

Run the proof of of a single solver e.g. solvers/1.lean:

lake env lean solvers/1.lean

Build just one solver:

lake build p1

TODO we wanted lake build 1 but Codex doesn’t know how, it gives some errors.

Linting with lint.py is especially important for Lean:

./lint.py -l lean

because it rules out many things which were very awkward to check in lean self-introspection alone, e.g.:

  • partial: nothing can be partial, all our functions must terminate, partial is only allowed on the problem statements as a helper

The Lean status table in this README can be automatically updated with:

./lean.py -A -l lean

This is how things are organized:

  • data/project-euler-statements/data/lean/ProjectEulerStatements/P1.lean: defines a ProjectEulerStatements.P1.naive function, possibly non-computable, which we believe matches the informal English-language problem definition, therefore formally defining it

    • sometimes an alternative ProjectEulerStatements.P1.naive2 is also defined as an alternative statement and it is also proven to be equivalent to naive

  • ProjectEulerSolutions/P1.lean: defines a computable function ProjectEulerSolvers.P1.solve which is an efficient algorithm to solve the problem

  • solvers/1.lean: defines a function main which trivially uses solve and serves as the entry point of the solvers/1_lean.out executable. We need this in a separate file from ProjectEulerSolutions/P1.lean because otherwise lean would complain about having multiple functions called main functions on the same project

    def main : IO Unit := do
      IO.println (solve 1000)
  • ProjectEulerSolutions/P1.lean: proves a theorem called equiv which states that solve and naive both have the same output for every input

  • ProjectEulerStatements.lean: imports all the solve functions and theorems and checks that they are trivially equivalent to the naive statement functions by using equiv. This ensures that all solve and equiv are defined, and that solve and naive both have take the same argument types

    example : ProjectEulerStatements.P1.naive = ProjectEulerSolutions.P1.solve := by
      apply (funext_iff).2
      simpa [funext_iff] using ProjectEulerSolutions.P1.equiv

One core technique is splitting things strategically across files, to make it easy to ensure that LLM’s haven’t touched things they shouldn’t have at each step. For example, we don’t want the LLMs to freely modify function definitions when we are asking them to prove things about said functions.

We have tried to also build Lean more simply with make but we failed so far, related threads:

Lean perf notes from Codex:

  • solvers/25.lean

    Result on my run:
    
    - ./test.py 25 → Lean ~2.03s vs Python ~0.21s (still ~10× slower)
    
    Why it’s still slower:
    
    - Lean’s Nat big‑int multiplication is relatively heavy compared to Python’s highly optimized bignum, and fast‑doubling uses multiplications of 1000‑digit numbers.
    
    If you want to go faster, the next step is to avoid big‑ints entirely and use a floating‑point closed‑form estimate for the index (Binet/log10), optionally with a tiny adjustment. I can implement that (it would be effectively
    constant‑time and should be much faster), but it would move away from “pure integer” logic.
    
    Let me know if you want that change.
  • solvers/44.lean: TODO

Port Python to Lean:

Port solvers/4.py through to solvers/6.py to lean. Ignore all Python comments from the Lean file. Make sure "lake -R build" followed by "./test.py <N>.lean" passes. Convert any python asserts into lean "example" statements with native_decide. Put everything of that file except the main and imports under namespace ProjectEulerSolutions.P<N>, where <N> is the problem number. Name the final solver function as "solve". Don't worry about proofs for now, just make it as equivalent to the Python as possible and ensure it passes the test.
  • solvers/: the solver programs

    • solvers/400.py: a solver program

    • solvers/400.md: optional high level Markdown description of the solution

    • solvers/2.py.json: optional LLM metadata describing the generation process. This one was done on API:

      {
        "output_tokens": 432,
        "model": "gpt-5.2-2025-12-11",
        "interface": "api",
        "reasoning_effort": "high",
        "input_prompt": "TASK\n\nSolve the following problem by coding a Python program that runs on pypy3. Add asserts for the test cases given in the problem statement if any, and a print with the final result at the end. Your code must run in a few minutes at most, usually a few seconds. Don't try to brute force the solution, only use brute forcing if needed to better understand the problem on small instances. Don't use external libraries, only the Python standard library. Don't use multithreading, only a single CPU core. Use typing for function signatures.\n\nOUTPUT FORMAT\n\nmain.py\n\n<Python implementation>\n\nREADME.md\n\n<Markdown summary of the reasoning/insights used (high level; no chain-of-thought)>\n\nPROBLEM\n\n# Even Fibonacci Numbers\n\nEach new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with $1$ and $2$, the first $10$ terms will be:\n$$1, 2, 3, 5, 8, 13, 21, 34, 55, 89, \\dots$$\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.\n",
        "generation_time_seconds": 9.143
      }
      • solvers/976.py.json is how it should look like for Codex runs (TODO not currently automated):

        {
          "output_tokens": 131264,
          "model": "gpt-5.2-codex",
          "interface": "codex-0.77.0",
          "input_prompt": "\"Solve the following problem with a program main.py, make sure it runs in pypy3: <p>\\n  Two players X and O play a game with $ strips of squares of lengths ,\\\\dots,n_k$, originally all blank.</p>\\n\\n  <p>\\n  Starting with X, they make moves in turn. At X's turn, X draws an \\\"X\\\" symbol; at O's turn, O draws an \\\"O\\\" symbol.<br>\\n  The symbol must be drawn in one blank square with either red or blue pen, subject to the following restrictions:</p>\\n  <ol>\\n  <li>two symbols in adjacent squares on one strip must be different symbols <b>and</b> must have different colour;</li>\\n  <li>if there is at least one blank strip, then one must draw on a blank strip.</li></ol>\\n  <p>\\n  Whoever does not have a valid move loses the game.</p>\\n\\n  <p>\\n  Let (K, N)$ be the number of tuples $ such that  \\\\leq k \\\\leq K$, \\\\leq n_1\\\\leq\\\\cdots\\\\leq n_k\\\\leq N$ and that X has a winning strategy to the\\n  corresponding game.<br>\\n  For example, (2, 4)=7$ and (5, 10) = 901$.</p>\\n\\n  <p>\\n  Find (10^7, 10^7)\\\\bmod 1234567891$.</p>\\n\"",
          "generation_time_seconds": 1695
        }

Install the Asciidoctor gem via Bundler and generate HTML:

bundle install

and then build with:

./readme.sh

The nominal license for this entire repo is CC0 (public domain) with the following caveats:

  • README.adoc: written manually, so certain CC0

  • solvers/: double check the file headers. In a very small number of cases we have copied code from random public places, notably https://github.com/lucky-bai/projecteuler-solutions/issues where it seemed clear that the author wanted a free license but they might have not specified it. We never ever take code from the private forums, or from public solvers that clearly label their code as proprietary (https://github.com/nayuki/Project-Euler-solutions lol), where we would almost certain receive DMCA takedown.

      Otherwise, the vast majority of solvers is very likely safely CC0, or whatever your lawyer says is the license for code generated by LLMs (for those that are LLM generated, some were imported from properly licensed existing human solvers like https://github.com/stbrumme/euler and https://github.com/igorvanloo/Project-Euler-Explained/tree/master/Finished%20Problems and are for sure CC0), or CC-By-NC-SA if your lawyer says that problem solutions must have the same license as problem statements.
    * infrastructure code such as link:test.py[] and link:generate-solvers.py[], link:logo.jpg[]: mostly vibe coded in Codex, so CC0 on our side or take your lawyer's pick again

Benchmarked on Lenovo ThinkPad P14s by running ./main.py:

ID

Explanation

Runtime (s)

Output

Error

1.py

1.md

0.054

233168

2.py

2.md

0.104

4613732

3.py

3.md

0.120

6857

4.py

4.md

0.126

906609

5.py

5.md

0.111

232792560

6.py

6.md

0.106

25164150

7.py

7.md

0.114

104743

8.py

8.md

0.113

23514624000

9.py

9.md

0.103

31875000

10.py

10.md

0.116

142913828922

11.py

11.md

0.101

70600674

12.py

12.md

0.185

76576500

13.py

13.md

0.094

5537376230

14.py

14.md

0.647

837799

15.py

15.md

0.096

137846528820

16.py

16.md

0.118

1366

17.py

17.md

0.121

21124

18.py

18.md

0.106

1074

19.py

19.md

0.122

171

20.py

20.md

0.119

648

21.py

21.md

0.122

31626

22.py

22.md

0.141

871198282

23.py

23.md

0.217

4179871

24.py

24.md

0.116

2783915460

25.py

25.md

0.155

4782

26.py

26.md

0.111

983

27.py

27.md

0.149

-59231

28.py

28.md

0.095

669171001

29.py

29.md

0.136

9183

30.py

30.md

0.103

443839

31.py

31.md

0.117

73682

32.py

32.md

0.153

45228

33.py

33.md

0.124

100

34.py

34.md

0.284

40730

35.py

35.md

0.161

55

36.py

36.md

0.127

872187

37.py

37.md

0.140

748317

38.py

38.md

0.141

932718654

39.py

39.md

0.118

840

40.py

40.md

0.118

210

41.py

41.md

0.143

7652413

42.py

42.md

0.178

162

43.py

43.md

0.121

16695334890

44.py

44.md

0.473

5482660

45.py

45.md

0.075

1533776805

46.py

46.md

0.163

5777

47.py

47.md

0.116

134043

48.py

48.md

0.114

9110846700

49.py

49.md

0.129

296962999629

50.py

50.md

0.150

997651

51.py

51.md

0.149

121313

52.py

52.md

0.123

142857

53.py

53.md

0.106

4075

54.py

54.md

0.198

376

55.py

55.md

0.166

249

56.py

56.md

0.088

972

57.py

57.md

0.076

153

58.py

58.md

0.190

26241

59.py

59.md

0.169

129448

60.py

60.md

0.511

26033

61.py

61.md

0.084

28684

62.py

62.md

0.145

127035954683

63.py

63.md

0.070

49

64.py

64.md

0.132

1322

65.py

65.md

0.113

272

66.py

66.md

0.135

661

67.py

67.md

0.155

7273

68.py

68.md

0.124

6531031914842725

69.py

69.md

0.069

510510

70.py

70.md

0.590

8319823

71.py

71.md

0.168

428570

72.py

72.md

0.174

303963552391

73.py

73.md

0.880

7295372

74.py

74.md

0.151

402

75.py

75.md

0.162

161667

76.py

76.md

0.116

190569291

77.py

77.md

0.123

71

78.py

78.md

0.241

55374

79.py

79.md

0.095

73162890

80.py

80.md

0.123

40886

81.py

81.md

0.116

427337

82.py

82.md

0.111

260324

83.py

83.md

0.240

425185

84.py

84.md

0.134

101524

85.py

85.md

0.119

2772

86.py

86.md

0.455

1818

87.py

87.md

0.295

1097343

88.py

88.md

0.129

7587457

89.py

89.md

0.138

743

90.py

90.md

0.155

1217

91.py

91.md

0.113

14234

92.py

92.md

0.231

8581146

93.py

93.md

1.740

1258

94.py

94.md

0.060

518408346

95.py

95.md

0.370

14316

96.py

96.md

0.175

24702

97.py

97.md

0.117

8739992577

98.py

98.md

0.226

18769

99.py

99.md

0.064

709

100.py

100.md

0.116

756872327473

101.py

101.md

0.134

37076114526

102.py

102.md

0.107

228

103.py

103.md

1.412

20313839404245

104.py

104.md

0.173

329468

105.py

105.md

0.080

73702

106.py

106.md

0.064

21384

107.py

107.md

0.065

259679

108.py

108.md

0.064

180180

109.py

109.md

0.085

38182

110.py

110.md

0.112

9350130049860600

111.py

111.md

0.104

612407567715

112.py

112.md

0.135

1587000

113.py

113.md

0.057

51161058134250

114.py

114.md

0.055

16475640049

115.py

115.md

0.088

168

116.py

116.md

0.058

20492570929

117.py

117.md

0.056

100808458960497

118.py

118.md

0.723

44680

119.py

119.md

0.106

248155780267521

120.py

120.md

0.055

333082500

121.py

121.md

0.057

2269

122.py

122.md

0.323

1582

123.py

123.md

0.075

21035

124.py

124.md

0.136

21417

125.py

125.md

0.072

2906969179

126.py

126.md

0.074

18522

127.py

127.md

0.283

18407904

128.py

128.md

0.078

14516824220

129.py

129.md

0.066

1000023

130.py

130.md

0.072

149253

131.py

131.md

0.058

173

132.py

132.md

0.069

843296

133.py

133.md

0.101

453647705

134.py

134.md

0.157

18613426663617118

135.py

135.md

0.084

4989

136.py

136.md

2.940

2544559

137.py

137.md

0.057

1120149658760

138.py

138.md

0.056

1118049290473932

139.py

139.md

0.982

10057761

140.py

140.md

0.069

5673835352990

141.py

141.md

0.549

878454337159

142.py

142.md

0.152

1006193

143.py

143.md

0.319

30758397

144.py

144.md

0.055

354

145.py

145.md

0.056

608720

146.py

146.md

1.776

676333270

147.py

147.md

0.116

846910284

148.py

148.md

0.057

2129970655314432

149.py

149.md

0.180

52852124

150.py

150.md

1.993

-271248680

151.py

151.md

0.090

0.464399

152.py

152.md

0.342

301

153.py

153.md

2.886

17971254122360635

154.py

154.md

18.913

479742450

155.py

155.md

9.085

3857447

156.py

156.md

0.123

21295121502550

157.py

157.md

0.074

53490

158.py

158.md

0.056

409511334375

159.py

159.md

0.161

14489159

160.py

160.md

0.069

16576

161.py

161.md

0.399

20574308184277971

162.py

162.md

0.085

3D58725572C62302

163.py

163.md

0.221

343047

164.py

164.md

0.061

378158756814587

165.py

165.md

7.375

2868868

166.py

166.md

2.779

7130034

167.py

167.md

0.226

3916160068885

168.py

168.md

0.070

59206

169.py

169.md

0.054

178653872807

170.py

170.md

0.127

9857164023

171.py

171.md

0.059

142989277

172.py

172.md

0.097

227485267000992000

173.py

173.md

0.059

1572729

174.py

174.md

0.092

209566

175.py

175.md

0.059

1,13717420,8

176.py

176.md

0.065

96818198400000

177.py

177.md

2.322

129325

178.py

178.md

0.095

126461847755

179.py

179.md

1.356

986262

180.py

180.md

0.375

285196020571078987

181.py

181.md

0.157

83735848679360680

182.py

182.md

0.416

399788195976

183.py

183.md

0.063

48861552

184.py

184.md

0.135

1725323624056

185.py

185.md

3.049

4640261571849533

186.py

186.md

3.390

2325629

187.py

187.md

0.450

17427258

188.py

188.md

0.055

95962097

189.py

189.md

0.244

10834893628237824

190.py

190.md

0.055

371048281

191.py

191.md

0.054

1918080160

192.py

192.md

0.134

57060635927998347

193.py

193.md

1.771

684465067343069

194.py

194.md

0.056

61190912

195.py

195.md

1.356

75085391

196.py

196.md

3.319

322303240771079935

197.py

197.md

0.058

1.710637717

198.py

198.md

0.099

52374425

199.py

199.md

0.072

0.00396087

200.py

200.md

0.096

229161792008

201.py

201.md

1.965

115039000

202.py

202.md

0.061

1209002624

203.py

203.md

0.059

34029210557338

204.py

204.md

0.099

2944730

205.py

205.md

0.076

0.5731441

206.py

206.md

0.057

1389019170

207.py

207.md

0.058

44043947822

208.py

208.md

0.402

331951449665644800

209.py

209.md

0.061

15964587728784

210.py

210.md

1.377

1598174770174689458

211.py

211.md

7.206

1922364685

212.py

212.md

1.672

328968937309

213.py

213.md

0.174

330.721154

214.py

214.md

2.602

1677366278943

215.py

215.md

0.190

806844323190414

216.py

216.md

3.788

5437849

217.py

217.md

0.070

6273134

218.py

218.md

0.056

0

219.py

219.md

0.058

64564225042

220.py

220.md

0.074

139776,963904

221.py

221.md

0.738

1884161251122450

222.py

222.md

0.375

1590933

223.py

223.md

1.422

61614848

224.py

224.md

0.235

4137330

225.py

225.md

0.072

2009

226.py

226.md

0.080

0.11316017

227.py

227.md

0.309

3780.618622

228.py

228.md

0.060

86226

229.py

229.md

13.528

11325263

230.py

230.md

0.058

850481152593119296

231.py

231.md

0.173

7526965179680

232.py

232.md

0.096

0.83648556

233.py

233.md

0.115

271204031455541309

234.py

234.md

0.075

1259187438574927161

235.py

235.md

0.057

1.002322108633

236.py

236.md

0.261

123/59

237.py

237.md

0.074

15836928

238.py

238.md

2.514

9922545104535661

239.py

239.md

0.078

0.001887854841

240.py

240.md

0.425

7448717393364181966

241.py

241.md

0.215

482316491800641154

242.py

242.md

0.058

997104142249036713

243.py

243.md

0.059

892371480

244.py

244.md

0.155

96356848

245.py

245.md

1.428

288084712410001

246.py

246.md

0.102

810834388

247.py

247.md

0.709

782252

248.py

248.md

1.328

23507044290

249.py

249.md

0.774

9275262564250418

250.py

250.md

0.404

1425480602091519

251.py

251.md

21.509

18946051

252.py

252.md

7.189

104924.0

253.py

253.md

1.815

11.492847

254.py

254.md

0.610

8184523820510

255.py

255.md

0.867

4.4474011180

256.py

256.md

0.257

85765680

257.py

257.md

2.842

139012411

258.py

258.md

1.553

12747994

259.py

259.md

5.669

20101196798

260.py

260.md

0.946

167542057

261.py

261.md

0.133

238890850232021

262.py

262.md

0.446

2531.205

263.py

263.md

5.518

2039506520

264.py

264.md

0.972

2816417.1055

265.py

265.md

0.105

209110240768

266.py

266.md

8.649

1096883702440585

267.py

267.md

0.136

0.999992836187

268.py

268.md

1.449

785478606870985

269.py

269.md

0.247

1311109198529286

270.py

270.md

0.195

82282080

271.py

271.md

0.063

4617456485273129588

272.py

272.md

0.562

8495585919506151122

273.py

273.md

0.315

2032447591196869022

274.py

274.md

0.257

1601912348822

275.py

275.md

42.292

15030564

276.py

276.md

0.347

5777137137739632912

277.py

277.md

0.057

1125977393124310

278.py

278.md

0.213

1228215747273908452

279.py

279.md

4.738

416577688

280.py

280.md

0.750

430.088247

281.py

281.md

0.067

1485776387445623

282.py

282.md

0.062

1098988351

283.py

283.md

9.789

28038042525570324

284.py

284.md

0.289

5a411d7b

285.py

285.md

0.073

157055.80999

286.py

286.md

0.075

52.6494571953

287.py

287.md

4.460

313135496

288.py

288.md

0.873

605857431263981935

289.py

289.md

0.142

6567944538

290.py

290.md

0.131

20444710234716473

291.py

291.md

4.436

4037526

292.py

292.md

1.574

3600060866

293.py

293.md

0.155

2209

294.py

294.md

0.116

789184709

295.py

295.md

4.406

4884650818

296.py

296.md

0.517

1137208419

297.py

297.md

0.053

2252639041804718029

298.py

298.md

0.449

1.76882294

299.py

299.md

1.022

549936643

300.py

300.md

0.965

8.0540771484375

301.py

301.md

0.055

2178309

302.py

302.md

1.875

1170060

303.py

303.md

0.635

1111981904675169

304.py

304.md

0.566

283988410192

305.py

305.md

0.140

18174995535140

306.py

306.md

0.058

852938

307.py

307.md

0.065

0.7311720251

308.py

308.md

0.137

1539669807660924

309.py

309.md

1.512

210139

310.py

310.md

0.142

2586528661783

311.py

311.md

0.175

2466018557

312.py

312.md

0.379

324681947

313.py

313.md

0.072

2057774861813004

314.py

314.md

1.599

132.52756426

315.py

315.md

0.219

13625242

316.py

316.md

0.262

542934735751917735

317.py

317.md

0.059

1856532.8455

318.py

318.md

0.072

709313889

319.py

319.md

0.562

268457129

320.py

320.md

1.040

278157919195482643

321.py

321.md

0.057

2470433131948040

322.py

322.md

0.075

999998760323313995

323.py

323.md

0.056

6.3551758451

324.py

324.md

0.235

96972774

325.py

325.md

0.074

54672965

326.py

326.md

0.437

1966666166408794329

327.py

327.md

0.056

34315549139516

328.py

328.md

0.127

260511850222

329.py

329.md

0.066

199740353/29386561536000

330.py

330.md

0.070

15955822

331.py

331.md

0.079

467178235146843549

332.py

332.md

0.306

2717.751525

333.py

333.md

2.363

3053105

334.py

334.md

0.416

150320021261690835

335.py

335.md

0.059

5032316

336.py

336.md

0.250

CAGBIHEFJDK

337.py

337.md

9.916

85068035

338.py

338.md

0.059

15614292

339.py

339.md

0.057

19823.542204

340.py

340.md

0.056

291504964

341.py

341.md

0.661

56098610614277014

342.py

342.md

0.276

5943040885644

343.py

343.md

0.327

269533451410884183

344.py

344.md

0.092

65579304332

345.py

345.md

0.083

13938

346.py

346.md

0.145

336108797689259276

347.py

347.md

0.188

11109800204052

348.py

348.md

4.147

1004195061

349.py

349.md

0.061

115384615384614952

350.py

350.md

0.130

84664213

351.py

351.md

0.088

11762187201804552

352.py

352.md

0.574

378563.260589

353.py

353.md

3.975

1.2759860331

354.py

354.md

1.382

58065134

355.py

355.md

0.479

1726545007

356.py

356.md

0.068

28010159

357.py

357.md

4.704

1739023853137

358.py

358.md

0.058

3284144505

359.py

359.md

0.056

40632119

360.py

360.md

0.065

878825614395267072

361.py

361.md

0.160

178476944

362.py

362.md

2.185

457895958010

363.py

363.md

0.131

0.0000372091

364.py

364.md

0.103

44855254

365.py

365.md

0.295

162619462356610313

366.py

366.md

0.057

88351299

367.py

367.md

0.147

48271207

368.py

368.md

0.586

253.6135092068

369.py

369.md

0.079

862400558448

370.py

370.md

0.072

41791929448408

371.py

371.md

0.055

40.66368097

372.py

372.md

1.613

301450082318807027

373.py

373.md

0.910

727227472448913

374.py

374.md

0.510

334420941

375.py

375.md

1.186

7435327983715286168

376.py

376.md

0.379

973059630185670

377.py

377.md

0.065

732385277

378.py

378.md

12.670

147534623725724718

379.py

379.md

5.535

132314136838185

380.py

380.md

0.060

6.3202e25093

381.py

381.md

2.755

139602943319822

382.py

382.md

0.066

697003956

383.py

383.md

0.094

22173624649806

384.py

384.md

0.059

3354706415856332783

385.py

385.md

0.076

3776957309612153700

386.py

386.md

0.540

528755790

387.py

387.md

0.105

696067597313468

388.py

388.md

0.488

831907372805129931

389.py

389.md

0.073

2406376.3623

390.py

390.md

0.067

2919133642971

391.py

391.md

0.764

61029882288

392.py

392.md

0.061

3.1486734435

393.py

393.md

1.343

112398351350823112

394.py

394.md

0.056

3.2370342194

395.py

395.md

0.183

28.2453753155

396.py

396.md

0.071

173214653

397.py

397.md

3.338

141630459461893728

398.py

398.md

0.105

2010.59096

399.py

399.md

4.758

1508395636674243,6.5e27330467

400.py

400.md

0.274

438505383468410633

401.py

401.md

1.965

281632621

402.py

402.md

0.086

356019862

403.py

403.md

1.065

18224771

404.py

404.md

9.241

1199215615081353

405.py

405.md

0.062

237696125

406.py

406.md

0.876

36813.12757207

407.py

407.md

7.712

39782849136421

408.py

408.md

2.153

299742733

409.py

409.md

0.263

253223948

410.py

410.md

1.747

799999783589946560

411.py

411.md

11.383

9936352

412.py

412.md

0.564

38788800

413.py

413.md

11.056

3079418648040719

414.py

414.md

12.788

552506775824935461

415.py

415.md

5.457

55859742

416.py

416.md

6.262

898082747

417.py

417.md

10.455

446572970925740

418.py

418.md

0.993

1177163565297340320

419.py

419.md

0.173

998567458,1046245404,43363922

420.py

420.md

0.883

145159332

421.py

421.md

1.907

2304215802083466198

422.py

422.md

0.058

92060460

423.py

423.md

1.891

653972374

424.py

424.md

0.709

1059760019628

425.py

425.md

4.342

46479497324

426.py

426.md

0.335

31591886008

427.py

427.md

2.920

97138867

428.py

428.md

1.632

747215561862

429.py

429.md

1.619

98792821

430.py

430.md

0.071

5000624921.38

431.py

431.md

0.069

23.386029052

432.py

432.md

1.124

754862080

433.py

433.md

0.060

326624372659664

434.py

434.md

0.655

863253606

435.py

435.md

0.065

252541322550

436.py

436.md

0.066

0.5276662759

437.py

437.md

6.335

74204709657207

438.py

438.md

7.387

2046409616809

439.py

439.md

12.202

968697378

440.py

440.md

0.871

970746056

441.py

441.md

0.590

5000088.8395

442.py

442.md

0.318

1295552661530920149

443.py

443.md

0.070

2744233049300770

444.py

444.md

0.081

1.200856722e263

445.py

445.md

3.509

659104042

446.py

446.md

2.519

907803852

447.py

447.md

0.485

530553372

448.py

448.md

2.526

106467648

449.py

449.md

0.059

103.37870096

450.py

450.md

0.207

583333163984220940

451.py

451.md

10.273

153651073760956

452.py

452.md

1.753

345558983

453.py

453.md

0.123

104354107

454.py

454.md

3.509

5435004633092

455.py

455.md

1.455

450186511399999

456.py

456.md

6.296

333333208685971546

457.py

457.md

0.903

2647787126797397063

458.py

458.md

0.066

423341841

459.py

459.md

21.874

3996390106631

460.py

460.md

0.539

18.420738199

461.py

461.md

0.098

159820276

462.py

462.md

0.060

5.5350769703e1512

463.py

463.md

0.060

808981553

464.py

464.md

3.114

198775297232878

465.py

465.md

3.808

585965659

466.py

466.md

6.679

258381958195474745

467.py

467.md

0.151

775181359

468.py

468.md

0.147

852950321

469.py

469.md

0.069

0.56766764161831

470.py

470.md

1.713

147668794

471.py

471.md

0.094

1.895093981e31

472.py

472.md

0.063

73811586

473.py

473.md

0.494

35856681704365

474.py

474.md

6.690

9690646731515010

475.py

475.md

0.077

75780067

476.py

476.md

5.719

110242.87794

477.py

477.md

0.321

25044905874565165

478.py

478.md

0.065

59510340

479.py

479.md

0.474

191541795

480.py

480.md

0.087

turnthestarson

481.py

481.md

0.381

729.12106947

482.py

482.md

2.962

1400824879147

483.py

483.md

0.260

4.993401567e22

484.py

484.md

1.228

8907904768686152599

485.py

485.md

1.951

51281274340

486.py

486.md

0.193

11408450515

487.py

487.md

0.238

106650212746

488.py

488.md

0.068

216737278

489.py

489.md

0.420

1791954757162

490.py

490.md

0.090

777577686

491.py

491.md

0.068

194505988824000

492.py

492.md

0.684

242586962923928

493.py

493.md

0.067

6.818741802

494.py

494.md

0.057

2880067194446832666

495.py

495.md

1.099

789107601

496.py

496.md

0.212

2042473533769142717

497.py

497.md

0.132

684901360

498.py

498.md

0.073

472294837

499.py

499.md

0.063

0.8660312

500.py

500.md

1.456

35407281

501.py

501.md

1.758

197912312715

502.py

502.md

2.771

749485217

503.py

503.md

0.081

3.8694550145

504.py

504.md

0.643

694687

505.py

505.md

90.495

714591308667615832

506.py

506.md

0.060

18934502

507.py

507.md

9.415

316558047002627270

508.py

508.md

0.105

891874596

509.py

509.md

0.062

151725678

510.py

510.md

0.060

315306518862563689

511.py

511.md

1.251

935247012

512.py

512.md

0.348

50660591862310323

513.py

513.md

0.467

2925619196

514.py

514.md

0.373

8986.86698

515.py

515.md

0.061

2422639000800

516.py

516.md

0.923

939087315

517.py

517.md

0.503

581468882

518.py

518.md

4.076

100315739184392

519.py

519.md

0.106

804739330

520.py

520.md

0.060

238413705

521.py

521.md

6.202

44389811

522.py

522.md

2.384

96772715

523.py

523.md

0.056

37125450.44

524.py

524.md

0.062

2432925835413407847

525.py

525.md

0.084

44.69921807

526.py

526.md

12.802

49601160286750947

527.py

527.md

0.063

11.92412011

528.py

528.md

0.066

779027989

529.py

529.md

8.754

23624465

530.py

530.md

5.551

207366437157977206

531.py

531.md

1.446

4515432351156203105

532.py

532.md

0.074

827306.56

533.py

533.md

0.877

789453601

534.py

534.md

45.654

11726115562784664

535.py

535.md

0.446

611778217

536.py

536.md

8.731

3557005261906288

537.py

537.md

0.834

779429131

538.py

538.md

1.154

22472871503401097

539.py

539.md

0.056

426334056

540.py

540.md

2.216

500000000002845

541.py

541.md

0.091

4580726482872451

542.py

542.md

0.931

697586734240314852

543.py

543.md

0.560

199007746081234640

544.py

544.md

2.547

640432376

545.py

545.md

0.742

921107572

546.py

546.md

0.067

215656873

547.py

547.md

0.349

11730879.0023

548.py

548.md

0.598

12144044603581281

549.py

549.md

3.536

476001479068717

550.py

550.md

0.355

328104836

551.py

551.md

0.094

73597483551591773

552.py

552.md

1.907

326227335

553.py

553.md

0.746

57717170

554.py

554.md

0.658

89539872

555.py

555.md

0.252

208517717451208352

556.py

556.md

0.957

52126939292957

557.py

557.md

13.430

2699929328

558.py

558.md

10.181

226754889

559.py

559.md

3.589

684724920

560.py

560.md

0.371

994345168

561.py

561.md

0.057

452480999988235494

562.py

562.md

0.159

51208732914368

563.py

563.md

4.361

27186308211734760

564.py

564.md

2.004

12363.698850

565.py

565.md

0.722

2992480851924313898

566.py

566.md

0.056

329569369413585

567.py

567.md

0.058

75.44817535

568.py

568.md

0.072

4228020

569.py

569.md

1.906

21025060

570.py

570.md

3.430

271197444

571.py

571.md

17.068

30510390701978

572.py

572.md

0.921

19737656

573.py

573.md

0.060

1252.9809

574.py

574.md

0.145

5780447552057000454

575.py

575.md

0.060

0.000989640561

576.py

576.md

5.153

344457.5871

577.py

577.md

0.096

265695031399260211

578.py

578.md

20.380

9219696799346

579.py

579.md

1.573

3805524

580.py

580.md

3.026

2327213148095366

581.py

581.md

3.091

2227616372734

582.py

582.md

0.105

19903

583.py

583.md

24.261

1174137929000

584.py

584.md

1.462

32.83822408

585.py

585.md

0.455

17714439395932

586.py

586.md

0.296

82490213

587.py

587.md

0.078

2240

588.py

588.md

0.062

11651930052

589.py

589.md

2.948

131776959.25

590.py

590.md

0.170

834171904

591.py

591.md

0.595

526007984625966

592.py

592.md

0.099

13415DF2BE9C

593.py

593.md

1.276

96632320042.0

594.py

594.md

0.161

47067598

595.py

595.md

0.143

54.17529329

596.py

596.md

5.135

734582049

597.py

597.md

0.101

0.5001817828

598.py

598.md

0.524

543194779059

599.py

599.md

0.054

12395526079546335

600.py

600.md

0.060

2668608479740672

601.py

601.md

0.056

1617243

602.py

602.md

0.745

269496760

603.py

603.md

0.221

879476477

604.py

604.md

0.115

1398582231101

605.py

605.md

0.057

59992576

606.py

606.md

5.711

158452775

607.py

607.md

0.086

13.1265108586

608.py

608.md

3.084

439689828

609.py

609.md

1.947

172023848

610.py

610.md

0.106

319.30207833

611.py

611.md

12.404

49283233900

612.py

612.md

0.094

819963842

613.py

613.md

0.057

0.3916721504

614.py

614.md

0.058

130694090

615.py

615.md

0.501

108424772

616.py

616.md

0.275

310884668312456458

617.py

617.md

0.078

1001133757

618.py

618.md

0.421

634212216

619.py

619.md

0.455

857810883

620.py

620.md

0.453

1470337306

621.py

621.md

0.156

11429712

622.py

622.md

0.064

3010983666182123972

623.py

623.md

0.332

3679796

624.py

624.md

0.071

984524441

625.py

625.md

1.455

551614306

626.py

626.md

0.181

695577663

627.py

627.md

0.065

220196142

628.py

628.md

0.724

210286684

629.py

629.md

0.099

626616617

630.py

630.md

0.955

9669182880384

631.py

631.md

0.372

869588692

632.py

632.md

3.947

728378714

633.py

633.md

0.178

1.0012e-10

634.py

634.md

0.133

4019680944

635.py

635.md

6.092

689294705

636.py

636.md

3.128

888316

637.py

637.md

26.541

49000634845039

638.py

638.md

0.160

18423394

639.py

639.md

4.330

797866893

640.py

640.md

1.358

50.317928

641.py

641.md

1.104

793525366

642.py

642.md

5.284

631499044

643.py

643.md

1.074

968274154

644.py

644.md

2.732

20.11208767

645.py

645.md

0.066

48894.2174

646.py

646.md

11.317

845218467

647.py

647.md

0.067

563132994232918611

648.py

648.md

1.036

301483197

649.py

649.md

0.102

924668016

650.py

650.md

0.487

538319652

651.py

651.md

0.125

448233151

652.py

652.md

0.059

983924497

653.py

653.md

0.095

1130658687

654.py

654.md

1.514

815868280

655.py

655.md

35.876

2000008332

656.py

656.md

0.082

888873503555187

657.py

657.md

0.057

219493139

658.py

658.md

0.932

958280177

659.py

659.md

1.278

238518915714422000

660.py

660.md

2.522

474766783

661.py

661.md

0.054

646231.2177

662.py

662.md

9.502

860873428

663.py

663.md

2.240

1884138010064752

664.py

664.md

0.060

35295862

665.py

665.md

2.468

11541685709674

666.py

666.md

0.075

0.48023168

667.py

667.md

3.129

1.5276527928

668.py

668.md

0.247

2811077773

669.py

669.md

0.057

56342087360542122

670.py

670.md

1.367

551055065

671.py

671.md

0.193

946106780

672.py

672.md

0.058

91627537

673.py

673.md

0.066

700325380

674.py

674.md

1.470

416678753

675.py

675.md

1.644

416146418

676.py

676.md

0.082

3562668074339584

677.py

677.md

1.966

984183023

678.py

678.md

4.406

1986065

679.py

679.md

0.064

644997092988678

680.py

680.md

46.699

563917241

681.py

681.md

51.074

2611227421428

682.py

682.md

0.063

290872710

683.py

683.md

0.104

2.38955315e11

684.py

684.md

0.057

922058210

685.py

685.md

0.251

662878999

686.py

686.md

0.692

193060223

687.py

687.md

0.065

0.3285320869

688.py

688.md

4.183

110941813

689.py

689.md

0.182

0.56565454

690.py

690.md

0.157

415157690

691.py

691.md

1.970

11570761

692.py

692.md

0.057

842043391019219959

693.py

693.md

5.618

699161

694.py

694.md

0.545

1339784153569958487

695.py

695.md

0.210

0.1017786859

696.py

696.md

0.238

436944244

697.py

697.md

0.054

4343871.06

698.py

698.md

0.066

57808202

699.py

699.md

0.549

37010438774467572

700.py

700.md

1.091

1517926517777556

701.py

701.md

33.191

13.51099836

702.py

702.md

0.059

622305608172525546

703.py

703.md

0.154

843437991

704.py

704.md

0.054

501985601490518144

705.py

705.md

1.414

480440153

706.py

706.md

0.084

884837055

707.py

707.md

0.195

652907799

708.py

708.md

3.455

28874142998632109

709.py

709.md

3.141

773479144

710.py

710.md

0.189

1275000

711.py

711.md

0.162

541510990

712.py

712.md

3.734

413876461

713.py

713.md

0.058

788626351539895

714.py

714.md

5.181

2.452767775565e20

715.py

715.md

19.342

883188017

716.py

716.md

0.056

238948623

717.py

717.md

0.776

1603036763131

718.py

718.md

1.439

228579116

719.py

719.md

0.855

128088830547982

720.py

720.md

0.620

688081048

721.py

721.md

9.604

700792959

722.py

722.md

0.076

3.376792776502e132

723.py

723.md

0.057

1395793419248

724.py

724.md

0.068

18128250110

725.py

725.md

0.116

4598797036650685

726.py

726.md

0.398

578040951

727.py

727.md

0.139

3.64039141

728.py

728.md

0.671

709874991

729.py

729.md

3.507

308896374.2502

730.py

730.md

33.244

1315965924

731.py

731.md

0.056

6086371427

732.py

732.md

0.245

45609

733.py

733.md

1.265

574368578

734.py

734.md

0.277

557988060

735.py

735.md

15.509

174848216767932

736.py

736.md

0.098

25332747903959376

737.py

737.md

0.099

757794899

738.py

738.md

3.703

143091030

739.py

739.md

2.410

711399016

740.py

740.md

1.467

0.0189581208

741.py

741.md

0.742

512895223

742.py

742.md

0.657

18397727

743.py

743.md

2.978

259158998

744.py

744.md

0.077

0.0001999600

745.py

745.md

2.320

94586478

746.py

746.md

0.133

867150922

747.py

747.md

16.529

681813395

748.py

748.md

2.223

276402862

749.py

749.md

1.626

13459471903176422

750.py

750.md

0.753

160640

751.py

751.md

0.060

2.223561019313554106173177

752.py

752.md

0.386

5610899769745488

753.py

753.md

0.179

4714126766770661630

754.py

754.md

4.889

785845900

755.py

755.md

0.060

2877071595975576960

756.py

756.md

0.068

607238.610661

757.py

757.md

25.684

75737353

758.py

758.md

0.266

331196954

759.py

759.md

0.055

282771304

760.py

760.md

0.072

172747503

761.py

761.md

0.056

5.05505046

762.py

762.md

0.196

285528863

763.py

763.md

1.367

798443574

764.py

764.md

0.194

255228881

765.py

765.md

0.059

0.2429251641

766.py

766.md

11.484

2613742

767.py

767.md

1.077

783976175

768.py

768.md

0.065

14655308696436060

769.py

769.md

5.336

14246712611506

770.py

770.md

0.058

127311223

771.py

771.md

0.097

398803409

772.py

772.md

0.489

83985379

773.py

773.md

0.061

556206950

774.py

774.md

1.335

459155763

775.py

775.md

0.169

946791106

776.py

776.md

0.090

9.627509725002e33

777.py

777.md

0.152

2.533018434e23

778.py

778.md

0.068

146133880

779.py

779.md

0.114

0.547326103833

780.py

780.md

1.965

613979935

781.py

781.md

0.616

162450870

782.py

782.md

3.155

318313204

783.py

783.md

0.066

136666597

784.py

784.md

5.046

5833303012576429231

785.py

785.md

1.332

29526986315080920

786.py

786.md

0.416

45594532839912702

787.py

787.md

0.252

202642367520564145

788.py

788.md

0.792

471745499

789.py

789.md

1.869

13431419535872807040

790.py

790.md

8.676

16585056588495119

791.py

791.md

3.915

404890862

792.py

792.md

0.332

2500500025183626

793.py

793.md

0.522

475808650131120

794.py

794.md

0.212

8.146681749623

795.py

795.md

0.428

955892601606483

796.py

796.md

0.384

43.20649061

797.py

797.md

6.070

47722272

798.py

798.md

5.903

132996198

799.py

799.md

2.141

1096910149053902

800.py

800.md

1.035

1412403576

801.py

801.md

2.641

638129754

802.py

802.md

0.362

973873727

803.py

803.md

0.595

9300900470636

804.py

804.md

1.340

4921370551019052

805.py

805.md

0.264

119719335

806.py

806.md

0.207

94394343

807.py

807.md

0.072

0.1091523673

808.py

808.md

2.760

3807504276997394

809.py

809.md

0.060

75353432948733

810.py

810.md

2.205

124136381

811.py

811.md

0.061

327287526

812.py

812.md

0.257

986262698

813.py

813.md

0.059

14063639

814.py

814.md

1.331

307159326

815.py

815.md

0.706

54.12691621

816.py

816.md

9.171

20.880613018

817.py

817.md

0.146

93158936107011

818.py

818.md

0.425

11871909492066000

819.py

819.md

0.073

1995.975556

820.py

820.md

1.640

44967734

821.py

821.md

0.085

9219661511328178

822.py

822.md

0.068

950591530

823.py

823.md

0.944

865849519

824.py

824.md

2.737

26532152736197

825.py

825.md

0.123

32.34481054

826.py

826.md

0.133

0.3889014797

827.py

827.md

0.637

397289979

828.py

828.md

1.033

148693670

829.py

829.md

4.156

41768797657018024

830.py

830.md

0.064

254179446930484376

831.py

831.md

0.058

5226432553

832.py

832.md

0.057

552839586

833.py

833.md

0.123

43884302

834.py

834.md

1.246

1254404167198752370

835.py

835.md

0.055

1050923942

836.py

836.md

0.054

aprilfoolsjoke

837.py

837.md

4.928

428074856

838.py

838.md

0.140

250591.442792

839.py

839.md

0.605

150893234438294408

840.py

840.md

1.221

194396971

841.py

841.md

0.231

381.7860132854

842.py

842.md

2.410

885226002

843.py

843.md

0.216

2816775424692

844.py

844.md

0.181

101805206

845.py

845.md

0.070

45009328011709400

846.py

846.md

0.244

9851175623

847.py

847.md

0.065

381868244

848.py

848.md

0.075

188.45503259

849.py

849.md

1.506

936203459

850.py

850.md

1.531

878255725

851.py

851.md

0.143

726358482

852.py

852.md

0.267

130.313496

853.py

853.md

0.081

44511058204

854.py

854.md

0.064

29894398

855.py

855.md

0.074

6.8827571976e-57

856.py

856.md

0.102

17.09661501

857.py

857.md

0.124

966332096

858.py

858.md

0.286

973077199

859.py

859.md

0.113

1527162658488196

860.py

860.md

0.103

958666903

861.py

861.md

2.582

672623540591

862.py

862.md

0.102

6111397420935766740

863.py

863.md

0.178

3862.871397

864.py

864.md

3.255

110572936177

865.py

865.md

0.905

761181918

866.py

866.md

0.058

492401720

867.py

867.md

0.157

870557257

868.py

868.md

0.061

3832914911887589

869.py

869.md

14.151

14.97696693

870.py

870.md

6.991

229.9129353234

871.py

871.md

0.565

2848790

872.py

872.md

0.057

2903144925319290239

873.py

873.md

0.322

735131856

874.py

874.md

0.195

4992775389

875.py

875.md

0.763

79645946

876.py

876.md

0.175

457019806569269

877.py

877.md

0.056

336785000760344621

878.py

878.md

0.260

23707109

879.py

879.md

0.123

4350069824940

880.py

880.md

0.854

522095328

881.py

881.md

0.113

205702861096933200

882.py

882.md

0.135

15800662276

883.py

883.md

1.213

14854003484704

884.py

884.md

0.558

1105985795684653500

885.py

885.md

0.059

827850196

886.py

886.md

2.665

5570163

887.py

887.md

0.057

39896187138661622

888.py

888.md

0.105

227429102

889.py

889.md

0.070

424315113

890.py

890.md

2.349

820442179

891.py

891.md

1.164

1541414

892.py

892.md

0.283

469137427

893.py

893.md

2.047

26688208

894.py

894.md

0.077

0.7718678168

895.py

895.md

0.505

670785433

896.py

896.md

0.161

274229635640

897.py

897.md

0.074

1.599827123

898.py

898.md

5.444

0.9861343531

899.py

899.md

0.059

10784223938983273

900.py

900.md

0.060

646900900

901.py

901.md

0.060

2.364497769

902.py

902.md

0.515

343557869

903.py

903.md

0.338

128553191

904.py

904.md

0.463

880652522278760

905.py

905.md

0.059

70228218

906.py

906.md

0.086

0.0195868911

907.py

907.md

0.195

196808901

908.py

908.md

4.863

451822602

909.py

909.md

0.073

399885292

910.py

910.md

0.207

547480666

911.py

911.md

0.301

5679.934966

912.py

912.md

0.056

674045136

913.py

913.md

0.546

2101925115560555020

914.py

914.md

0.238

414213562371805310

915.py

915.md

0.161

55601924

916.py

916.md

0.276

877789135

917.py

917.md

0.731

9986212680734636

918.py

918.md

0.055

-6999033352333308

919.py

919.md

3.969

134222859969633

920.py

920.md

0.636

1154027691000533893

921.py

921.md

0.896

378401935

922.py

922.md

0.199

858945298

923.py

923.md

0.309

740759929

924.py

924.md

0.799

811141860

925.py

925.md

5.889

400034379

926.py

926.md

0.410

40410219

927.py

927.md

8.857

207282955

928.py

928.md

5.463

81108001093

929.py

929.md

2.062

57322484

930.py

930.md

0.452

1.345679959251e12

931.py

931.md

6.114

128856311

932.py

932.md

2.151

72673459417881349

933.py

933.md

12.768

5707485980743099

934.py

934.md

0.233

292137809490441370

935.py

935.md

0.113

759908921637225

936.py

936.md

0.114

12144907797522336

937.py

937.md

18.199

792169346

938.py

938.md

0.073

0.2928967987

939.py

939.md

0.933

246776732

940.py

940.md

0.062

969134784

941.py

941.md

45.019

1068765750

942.py

942.md

1.546

557539756

943.py

943.md

27.804

1038733707

944.py

944.md

0.336

1228599511

945.py

945.md

0.536

83357132

946.py

946.md

0.095

585787007

947.py

947.md

0.964

213731313

948.py

948.md

0.178

1033654680825334184

949.py

949.md

2.124

726010935

950.py

950.md

0.108

429162542

951.py

951.md

0.070

495568995495726

952.py

952.md

0.883

794394453

953.py

953.md

64.619

176907658

954.py

954.md

37.720

736463823

955.py

955.md

0.342

6795261671274

956.py

956.md

0.129

882086212

957.py

957.md

0.060

234897386493229284

958.py

958.md

0.436

367554579311

959.py

959.md

0.943

0.857162085

960.py

960.md

0.056

243559751

961.py

961.md

1.141

166666666689036288

962.py

962.md

12.621

7259046

963.py

963.md

14.959

55129975871328418

964.py

964.md

0.095

4.7126135532e-29

965.py

965.md

0.267

0.0003452201133

966.py

966.md

8.146

29337152.09

967.py

967.md

1.484

357591131712034236

968.py

968.md

0.755

885362394

969.py

969.md

0.067

412543690

970.py

970.md

0.134

44754029

971.py

971.md

3.167

33626723890930

972.py

972.md

24.422

3575508

973.py

973.md

0.397

427278142

974.py

974.md

0.306

13313751171933973557517973175

975.py

975.md

5.843

88597366.47748

976.py

976.md

0.680

675608326

977.py

977.md

1.584

537945304

978.py

978.md

0.066

254.54470757

979.py

979.md

0.120

189306828278449

980.py

980.md

0.389

124999683766

981.py

981.md

0.128

794963735

982.py

982.md

0.112

4.381944

983.py

983.md

0.186

6725

984.py

984.md

0.068

885722296

985.py

985.md

0.226

1734334

986.py

986.md

8.713

15418494040

987.py

987.md

0.438

11044580082199135512

988.py

988.md

0.071

2727531976556215755

989.py

989.md

16.388

697845151

error: missing reference answer

990.py

990.md

2.302

50322750

991.py

991.md

0.134

23871972654940

error: missing reference answer

992.py

992.md

0.088

568021234

error: missing reference answer

993.py

993.md

0.093

1661971830985915304

error: missing reference answer

994.py

994.md

18.615

350247268

error: missing reference answer

995.py

995.md

3.084

2.21322e536280

error: missing reference answer

996.py

996.md

0.480

137726405

error: missing reference answer

997.py

997.md

0.056

5765993594880

error: missing reference answer

998.py

998.md

5.960

4439835458570

error: missing reference answer

999.py

999.md

0.318

801096743

error: missing reference answer

1000.py

1000.md

0.454

891213201

error: missing reference answer

1001.py

1001.md

4.100

256899492

error: missing reference answer

1002.py

1002.md

0.512

55047

error: missing reference answer

1003.py

1003.md

15.010

16561580535729

error: missing reference answer

1004.py

1004.md

1.275

452448508

error: missing reference answer

1005.py

1005.md

0.055

826079755

error: missing reference answer

1006.py

1006.md

0.063

62418970

error: missing reference answer

1007.py

1007.md

7.997

420800483

error: missing reference answer

1008.py

1008.md

0.454

282031486

error: missing reference answer

1009.py

1009.md

0.057

1664711380364301731

error: missing reference answer

This section lists the slowest solvers we have. Anything incredibly slower than most problems is likely to have important missing optimizations which we should ideally find.

The slowest Python solvers in this repository can be listed as CSV with:

./slowest-solvers.py

Use the same --set and -l/--lang style as test.py to inspect other benchmarked solver sets and languages:

./slowest-solvers.py --set solvers/eulersolve
./slowest-solvers.py --set solvers --set solvers/eulersolve -l cpp

A bar plot of solver times can be generated with plot.py but I couldn’t be bothered showing it here:

./plot.py

We’ve put some effort into optimizing the following slow solvers further but failed so far:

  • 507

  • 715

At benchmark.yaml we store benchmarks for:

  • "our" solvers in languages other than Python

    We have placed non-Python solvers in this separate list for the following reasons:

    • Python is the primary language, and it is nice to keep the main results table focused on it

    • our non-Python solvers will mostly be vibe-translated, and as such auto-generation metadata such as number of tokens and model doesn’t matter so much for them

  • other large solution sets that have become available to us to try and see if any of them have fundamentally better algorithms than ours

The main goal of this is to determine if there are fundamentally better algorithms available for upgrade.

This goal is fraught with danger because:

  • a faster solver might be possible for algorithms which work for a smaller subset of input values. The extreme case of this is a solver with a single print of the final known answer.

  • galactic algorithms galactic algorithms

but we do our best.

To list our Python implementations which have the greatest potential known improvements in another implementation as CSV use:

./greatest-improvements.py

To list the Python eulersolve implementations which have the greatest potential known improvements in another implementation as CSV use:

./greatest-improvements.py --reference-set solvers/eulersolve

Special setup for eulersolve because it is semi proprietary so we are not publishing it publicly for now, ask for clone permission if you want to run it:

git clone [email protected]:cirosantilli/eulersolve.git solvers/eulersolve
./test.py --set solvers/eulersolve

Some of the Python implementations are missing for eulersolve, often for the harder problems. We have used LLMs to try and automatically translate their C++ implementation to Python in those cases. We have also forced their implementations to use one thread only.

This section documents failed attempts at porting faster solutions from other sets.

No remaining entry from the previous above-5s failed-port batch is currently unresolved. Problems 211, 451, 505, 513, and 958 were revisited using the corresponding Python references to understand the missing performance detail, then reimplemented locally and benchmarked.

Not long after this repo was published, https://eulersolve.org/ was also published, which also contained all solutions to date.

The license of that repo is an informal "you can use it but you can’t", so it is better to treat it as fully copyrighted. The license is not clear on the website, we’ve contacted them at https://x.com/cirosantilli/status/2028165958762737926 and they failed to clarify to our standards, so that is our conclusion. That Tweet is not visible anymore account had been suspended as of July 2026, I’m an idiot for not having quoted and archived it, I noticed now that I was about to do it. But basically we asked:

Cool to see that that you released the code. Questions: 1) is code is copyrighted/have I missed a license somewhere? 2) do you have all solutions in a github repo somewhere? 3) do you have the runtime of each problem noted somewhere? Cheers!

and they replied something like:

You can do whatever you want, just cite the code. Not on GitHub because we don't want it all to be downloadable easily.

so you can’t really do whatever you want with it, and so it is better treated as proprietary.

The implementations at https://eulersolve.org/ are very fast, terminating in 3s according to author which we have mostly verified. However they use threading heavily, which we have avoided, because thread counts vary significantly across processors.

We’ve since made a scrapper for their solvers: scrape-eulersolve-org.sh, downloaded, adapted their solvers our standards, notably making them single threaded and removing non stdlib dependencies, reuploaded to https://github.com/cirosantilli/eulersolve in a private repo given it’s license status, benchmarked their solvers, and stole their greatest improvements techniques over ours.

But still, even though their license is messy, that project is that it provides the solution summary which we can raid in dire times.

Contributors

cirosantilli

Issues