Approach

  Blog    |     February 02, 2026

To solve the problem of computing the product of numbers from 1 to 100 (i.e., 100 factorial) without directly multiplying the numbers, we can use the prime factorization approach. This method involves breaking down the factorial into its prime factors, calculating the exponent of each prime in the factorization, and then combining these primes raised to their respective exponents to form the final product. This approach efficiently handles the large intermediate values by leveraging the properties of prime factorization and modular arithmetic.

  1. Generate Primes up to 100: Use the Sieve of Eratosthenes to find all prime numbers less than or equal to 100.
  2. Calculate Exponents for Each Prime: For each prime number, determine its exponent in the factorization of 100! using Legendre's formula. The exponent is calculated as the sum of the integer divisions of 100 by increasing powers of the prime until the power exceeds 100.
  3. Compute the Product: Multiply all the primes raised to their respective exponents. This is done efficiently using modular exponentiation to handle large numbers and avoid overflow.

Solution Code

def sieve(n):
    is_prime = [True] * (n + 1)
    is_prime[0] = is_prime[1] = False
    for i in range(2, int(n**0.5) + 1):
        if is_prime[i]:
            for j in range(i*i, n+1, i):
                is_prime[j] = False
    primes = [i for i, prime in enumerate(is_prime) if prime]
    return primes
def exponent_in_factorial(p, n):
    exponent = 0
    power = p
    while power <= n:
        exponent += n // power
        power *= p
    return exponent
def main():
    n = 100
    primes = sieve(n)
    result = 1
    for p in primes:
        exp = exponent_in_factorial(p, n)
        result *= pow(p, exp)
    return result
if __name__ == "__main__":
    print(main())

Explanation

  1. Prime Generation (Sieve of Eratosthenes):

    • The sieve function generates all prime numbers up to 100. It initializes a boolean array where each index represents whether the number is prime. It marks non-prime indices by iterating through multiples of each prime starting from its square.
  2. Exponent Calculation (Legendre's Formula):

    • The exponent_in_factorial function calculates the exponent of a prime p in the factorization of n!. For each prime, it sums the integer divisions of n by increasing powers of p (i.e., n//p + n//p^2 + n//p^3 + ...) until the power exceeds n.
  3. Product Calculation:

    • The main function computes the product of all primes raised to their respective exponents. For each prime, it calculates its exponent in 100! and multiplies the result by the prime raised to this exponent using Python's built-in pow function, which efficiently handles large exponents.

This approach efficiently computes 100! by leveraging prime factorization and modular arithmetic, avoiding direct multiplication of large intermediate values and ensuring accuracy. The Sieve of Eratosthenes ensures optimal prime generation, and Legendre's formula efficiently computes the exponents for each prime in the factorization. The final product is constructed by combining these primes raised to their exponents.


Request an On-site Audit / Inquiry

SSL Secured Inquiry