illustris 4fb1bd90db
init
2026-01-08 18:11:30 +05:30

56 lines
1.3 KiB
Python

#!/usr/bin/env python3
"""
Scenario 1: The Obvious CPU Hog
===============================
This program counts prime numbers using trial division.
It's intentionally slow to demonstrate profiling.
EXERCISES:
1. Run with: time python3 prime_slow.py
2. Profile with: python3 -m cProfile -s cumtime prime_slow.py
3. Generate flamegraph: py-spy record -o prime_slow.svg -- python3 prime_slow.py
4. Identify the hot function, then see prime_fast.py for the optimized version
"""
import sys
def is_prime(n):
"""Check if n is prime using trial division."""
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
# Check odd divisors up to sqrt(n)
i = 3
while i * i <= n:
if n % i == 0:
return False
i += 2
return True
def count_primes(limit):
"""Count all primes up to limit."""
count = 0
for n in range(2, limit + 1):
if is_prime(n):
count += 1
return count
def main():
limit = 1_000_000 # Adjust this to change runtime
if len(sys.argv) > 1:
limit = int(sys.argv[1])
print(f"Counting primes up to {limit}...")
result = count_primes(limit)
print(f"Found {result} primes")
if __name__ == "__main__":
main()