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.
Get Started
Browse worksheets, read the blog, explore tools, and connect with others.
Math Practice
Worksheets
All worksheets in one place: arithmetic, algebra, graphs, and logarithms. 100 pages per topic.
→Discussion
Blog
Articles, ideas, and discussions about mathematics teaching and learning.
→Tools
Miscellaneous
QR code generator, spinners, catenary calculator, and more useful tools.
→Community
Guestbook
Sign the guestbook and see messages from visitors around the world.
→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.