示例#1
0
def main(max_number):

    summation = 0
    prime_generator = generate_next_prime(start=5)

    first_prime = prime_generator.next()

    while first_prime <= max_number:

        second_prime = prime_generator.next()

        # we have the two following congruence relations:
        # x = 0 (mod second_prime)
        # x = first_prime(mod 10 ** (int(log10(first_prime)) + 1))
        # so we use the Chinese Remainder Theorem to solve for x.

        # thanks to Eigenray from http://projecteuler.net/thread=134
        # for the suggestion to use CRT.

        modulos = (second_prime, (10 ** (int(log10(first_prime)) + 1)),)
        remainders = (0, first_prime,)

        summation += crt(modulos, remainders)

        #print first_prime, second_prime, residual
        first_prime = second_prime

    print "Sum(S) : %d" % summation
示例#2
0
def main():

    # it's hard to know whether a number even
    # has a given number of prime factors
    # (avg case is ln ln n). so, disallow
    # the user from inputting a given number
    # of prime factors to find like I might normally do.

    repunit_length = 10 ** 9
    number_of_primes_to_find = 40

    prime_factors = set()
    primes = generate_next_prime()

    while len(prime_factors) != number_of_primes_to_find:

        new_prime = primes.next()

        # a base-10 repunit is formed via the following forumula:
        # (10 ** (number of digits) - 1) / (10 - 1)

        # we use modular exponentiation to see whether
        # 10 ** (number of digits) is divisible by 9 * some prime
        # with remainder 1.

        if pow(10, repunit_length, 9 * new_prime) == 1:
            prime_factors.add(new_prime)

    print "Sum of first %d factors: %d" % (number_of_primes_to_find,
        sum(prime_factors))
示例#3
0
def main():

    # it's hard to know whether a number even
    # has a given number of prime factors
    # (avg case is ln ln n). so, disallow
    # the user from inputting a given number
    # of prime factors to find like I might normally do.

    repunit_length = 10**9
    number_of_primes_to_find = 40

    prime_factors = set()
    primes = generate_next_prime()

    while len(prime_factors) != number_of_primes_to_find:

        new_prime = primes.next()

        # a base-10 repunit is formed via the following forumula:
        # (10 ** (number of digits) - 1) / (10 - 1)

        # we use modular exponentiation to see whether
        # 10 ** (number of digits) is divisible by 9 * some prime
        # with remainder 1.

        if pow(10, repunit_length, 9 * new_prime) == 1:
            prime_factors.add(new_prime)

    print "Sum of first %d factors: %d" % (number_of_primes_to_find,
                                           sum(prime_factors))
示例#4
0
def main(max_number):

    summation = 0
    prime_generator = generate_next_prime(start=5)

    first_prime = prime_generator.next()

    while first_prime <= max_number:

        second_prime = prime_generator.next()

        # we have the two following congruence relations:
        # x = 0 (mod second_prime)
        # x = first_prime(mod 10 ** (int(log10(first_prime)) + 1))
        # so we use the Chinese Remainder Theorem to solve for x.

        # thanks to Eigenray from http://projecteuler.net/thread=134
        # for the suggestion to use CRT.

        modulos = (
            second_prime,
            (10**(int(log10(first_prime)) + 1)),
        )
        remainders = (
            0,
            first_prime,
        )

        summation += crt(modulos, remainders)

        #print first_prime, second_prime, residual
        first_prime = second_prime

    print "Sum(S) : %d" % summation