About this site
Hi, I'm Daniel An, a math professor at SUNY Maritime College and the host of a YouTube channel covering Calculus and Differential Equations. I built this site to offer 100 worksheet pages for each problem type — all in PDF, all free.
The worksheets are aimed at basic algebra and precalculus. They're randomly generated by programs I wrote in Python, so no two sessions feel exactly alike. You don't have to do all 100 pages — practice until you feel you've mastered it, then move on.
Time your practice
The goal of math practice is speed without sacrificing accuracy. Always time yourself, track your progress, and keep a daily log. Most worksheets include answer keys at the back for easy self-checking.
Consistent practice reduces cognitive load when you move on to harder concepts. Students who lack fluency in the basics carry that extra weight into every new topic they encounter — don't be that student.
Three principles
The philosophy behind this site, in brief.
Volume builds fluency
Doing 100 problems of the same type isn't punishment — it's how skills become reflexes. Speed follows repetition.
Accuracy first, then speed
Time yourself, but never rush so fast you lose accuracy. The goal is both — fast and right. Work toward that.
Free and open
All worksheets are free for classroom and personal use. Print only the pages you need. Save trees.
Topics
Four collections of worksheets, each with downloadable PDFs.
Foundation
Arithmetic
Integers, fractions, prime factorization, square roots, and signed-number operations.
→Core Algebra
Basic Algebra
Linear and quadratic equations, inequalities, factoring, completing the square, and exponent rules.
→Visual Math
Graphs
Slope, intercepts, line equations, intersections, and graphing quadratic functions.
→Precalculus
Logarithms
Evaluating, expanding, and combining logarithms, plus solving logarithmic equations.
→Copyright & use
All worksheets are made freely available to the public and may be used in classrooms without copyright concerns. Note that worksheets may be updated or removed without notice, as they are randomly generated by Python programs.