Project Euler, competitive programming, and the notes I keep around.
This is my personal technical site. I use it to keep Project Euler write-ups, competitive programming solutions, essays, and code notes in one place. Most of my time lately has gone into AI/ML, algorithms, algebra, and post-quantum cryptography.
The site has two main problem-solving archives
Project Euler is still the largest body of work here, and Competitive Programming now has its own section instead of being mixed into the repository structure.
The long-form math archive
988 full problems with statements, proofs, final answers, and both C++ and Python implementations.
Browse Project Euler 02 Competitive ProgrammingICPC, IOI, CSES, and the DSA notebook
404 problem pages with statement, editorial, and code views across the contest archives, plus direct links to the original files when they are useful.
Open the archive 03 AboutA short background on what I am working on
AI/ML, algorithms, algebra, post-quantum cryptography, and the kind of work I like to keep notes on.
Read the backgroundProject Euler is still where I write the most
It is the longest-running part of the site, and still the best place to see full problem statements, proofs, and implementations together.
The math stays visible
Problem statements, proofs, algorithm notes, complexity analysis, and answers on one page.
Browse the archive 02 C++ sourceC++ implementation next to the write-up
Every problem page exposes the exact C++ file from the local Project Euler archive.
See a source page 03 Python sourceA second implementation when it helps
The Python version sits next to the write-up when I want a clearer or easier-to-check solution.
Open a dual-language entryGood entry points into the largest archive
A few handpicked problems to show the range: warmup arithmetic, modular arithmetic, combinatorics, and one high-number late-archive problem.
Multiples of 3 and 5
Find the sum of all the multiples of 3 or 5 below 1000. That is, compute S = sum_(1 <= k < 1000, 3 | k or 5 | k) k.
Self Powers
The series 1^1 + 2^2 + 3^3 +... + 10^10 = 10,405,071,317. Find the last ten digits of the series 1^1 + 2^2 + 3^3 +... + 1000^1000.
250250
Find the number of non-empty subsets of {1^1, 2^2, 3^3,..., 250250^250250} whose element sum is divisible by 250. Give the answer modulo 10^16.
Eulercoin
Leonhard Euler was born on 15 April 1707. Consider the sequence a_n = 1504170715041707 * n mod 4503599627370517. An element of this sequence is called an Eulercoin if it is strictly smaller than al...
Recently updated Project Euler entries
Pulled from file timestamps so the homepage can surface recent work without a manual list.
Partition Rank Statistics
The rank of a partition is (largest part) - (number of parts). Let R(n) = sum_(lambda vdash n) rank(lambda). Find sum_(n=1)^100 R(n) mod (10^9+7).
Cyclotomic Polynomial Evaluation
The n -th cyclotomic polynomial Phi_n(x) is defined as the minimal polynomial over Q whose roots are the primitive n -th roots of unity. Compute: S = sum_(n=1)^500 Phi_n(2) (mod 10^9 + 7)
Gaussian Elimination Mod p
For p = 2 and n = 10, find the number of invertible 10 x 10 binary matrices, modulo 10^9 + 7.
Digit Permutation Primes
A digit permutation prime group is a set of primes that are all permutations of the same digits. Find the number of such groups among primes below 10^6 where the group size is at least 4.
Project Euler still carries the longest writeups
The competitive programming section is intentionally more concise. Project Euler is still where the most detailed mathematics on the site tends to land.