예제 #1
0
파일: p49.py 프로젝트: kramimus/projeu
def candidate_triplets():
    """ just solving the special case of 3330-separated primes
    """
    sieve = prime.get_primes_up_to(10000)
    for i in range(1000, 10000):
        if i in sieve and i + 3330 in sieve and i + 6660 in sieve:
            yield (i, i+3330, i+6660)
예제 #2
0
파일: p46.py 프로젝트: kramimus/projeu
def get_least_violation():
    global primes
    primes = prime.get_primes_up_to(int(1e6))
    for i in itertools.count(start=1, step=2):
        if is_composite(i):
            for residual in get_residuals(i):
                if residual / 2 == residual // 2:
                    sq = math.sqrt(residual // 2)
                    if math.floor(sq) == sq:
                        break
            else:
                return i
예제 #3
0
파일: p47.py 프로젝트: kramimus/projeu
def get_next_quad():
    prev_max = 0
    current_max = int(1e6)
    while True:
        primes = prime.get_primes_up_to(current_max)
        composites = [i for i in range(prev_max, current_max) if i not in primes]
        for i, comp in enumerate(composites):
            if composites[i+3] - comp == 3:
                yield comp

        prev_max = current_max
        current_max *= 10
예제 #4
0
파일: p50.py 프로젝트: kramimus/projeu
def make_n2_sum(n):
    sum_lengths = Counter()
    prime_set = prime.get_primes_up_to(n)
    sorted_primes = sorted(prime_set)

    sums = [0]
    current_sum = 0
    for p in sorted_primes:
        current_sum += p
        sums.append(current_sum)

    max_length = 0
    for p in sorted_primes:
        for length, prime_sum in enumerate(sums):
            if max_length < length and prime_sum in prime_set:
                    max_length = length
                    sum_lengths[prime_sum] = max(sum_lengths[prime_sum], length)
        sums = [i - p for i in sums[1:]]
        if len(sums) < max_length:
            break
    return sum_lengths
예제 #5
0
파일: p35.py 프로젝트: kramimus/projeu
#!/usr/bin/env python3

import prime

def generate_rotations(n):
    digits = [d for d in str(n)]
    rotations = set()
    for i in range(len(digits) - 1):
        digits = [digits[-1]] + digits[:-1]
        rotations.add(int(''.join(digits)))
    return rotations

if __name__ == '__main__':
    circular = []
    primes = prime.get_primes_up_to(int(1e6))
    while primes:
        p = primes.pop()
        rotations = generate_rotations(p)

        # special case for 11
        if len(rotations) > 0 and next(iter(rotations)) == p:
            circular.append(p)

        elif primes & rotations == rotations:
            print(p, rotations)
            circular.append(p)
            circular += rotations
        primes -= rotations
    print(circular)
    print(len(circular))
예제 #6
0
 def test_sieve_some_primes(self):
     sieve = prime.get_primes_up_to(max(self.sample_primes))
     self.assertFalse(self.sample_primes - sieve)