Math & Number Theory Master Recap: Interview Cheatsheet

Sanjeev SharmaSanjeev Sharma
4 min read

Advertisement

Math & Number Theory Master Recap

Algorithm Selection Guide

Problem PatternAlgorithmComplexity
All primes up to nSieve of EratosthenesO(n log log n)
Factorize one numberTrial divisionO(sqrt n)
Factorize many numbersSPF sieve + lookupO(n log log n) + O(log n)
GCD of two numbersEuclideanO(log min)
Modular inverseFermat (prime mod)O(log mod)
Modular inverseExtended GCDO(log a)
a^n mod mBinary exponentiationO(log n)
nCr mod primePrecomputed factorialsO(n) build, O(1) query
Fibonacci(10^18)Matrix exponentiationO(log n)
Count divisorsFactor then multiply expsO(sqrt n)
Sum divisorsFactor then formulaO(sqrt n)
Euler totient(n)Trial factorizationO(sqrt n)
All totients to nSieveO(n log log n)
Convex hullGraham scanO(n log n)
Nim gameXOR all pilesO(n)
System of modular eqCRTO(k log m)
Range queriesSqrt decompositionO(sqrt n)

Template Library

MOD = 10**9 + 7

# Fast power
def pw(b, e, m=MOD): return pow(b, e, m)

# Modular inverse (prime modulus only)
def inv(a, m=MOD): return pow(a, m-2, m)

# GCD/LCM
from math import gcd
def lcm(a, b): return a // gcd(a, b) * b

# Factorials for nCr
def build_fact(n, m=MOD):
    f = [1]*(n+1)
    for i in range(1,n+1): f[i]=f[i-1]*i%m
    fi=[1]*(n+1); fi[n]=inv(f[n])
    for i in range(n-1,-1,-1): fi[i]=fi[i+1]*(i+1)%m
    return lambda n,k: f[n]*fi[k]%m*fi[n-k]%m if 0<=k<=n else 0
C = build_fact(10**6)

# Sieve
def sieve(n):
    p=[True]*(n+1); p[0]=p[1]=False
    for i in range(2,int(n**.5)+1):
        if p[i]:
            for j in range(i*i,n+1,i): p[j]=False
    return p

# SPF sieve
def spf_sieve(n):
    s=list(range(n+1))
    for i in range(2,int(n**.5)+1):
        if s[i]==i:
            for j in range(i*i,n+1,i):
                if s[j]==j: s[j]=i
    return s

Top 25 Math/Number Theory LeetCode Problems

#ProblemKey Technique
50Pow(x,n)Binary exponentiation
69Sqrt(x)Binary search
149Max Points on a LineGCD slope normalization
172Factorial Trailing ZerosCount factors of 5
204Count PrimesSieve
231Power of Twon & (n-1) == 0
263Ugly NumberDivide by 2,3,5
292Nim Gamen%4 != 0
338Counting Bitsdp[i] = dp[i>>1]+(i&1)
342Power of Fourn&(n-1)==0 and n%3==1
365Water and JugGCD Bezout
372Super PowModular exp
412Fizz BuzzModulo
441Arranging CoinsQuadratic formula
462Min Moves IIMedian
492Construct RectangleSqrt then iterate down
509FibonacciDP or matrix
523Continuous Subarray SumPrefix mod hashmap
593Valid SquareDist sort + check
628Max Product 3Sort + consider negatives
812Largest Triangle AreaConvex hull or brute force
878Nth Magical NumberBinary search + LCM I-E
1201Ugly Number IIII-E with LCM
1492kth Factor of nIterate sqrt
1979Find GCD of ArrayMin, max, gcd

Common Pitfalls

  1. Overflow: Use long long in C++; Python handles it natively
  2. Float comparison: Use abs(a-b) < 1e-9, not a == b
  3. Fermat's inverse: Only works when modulus is prime
  4. GCD of 0: gcd(0, n) = n — handle in LCM to avoid div by zero
  5. Sieve optimization: Start inner loop at p*p, not 2*p
  6. nCr for large n: Always precompute factorials, don't compute inline

Interview Mindset

  • Math problems often have O(1) formulas — look for the pattern first
  • Binary search on the answer works when the answer has monotone feasibility
  • GCD/LCM often unlocks number theory problems involving multiples
  • XOR is your friend for parity, single-occurrence, and Nim-style games
  • When stuck, try small examples and look for patterns in the sequence

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro