コード例 #1
0
ファイル: projecteuler.py プロジェクト: ogun/ProjectEuler
def problem35():
    """ Circular primes
    How many circular primes are there below one million?

    """
    return_value = 0
    for prime in mathhelper.prime_list(999999):
        prime_digits = list(str(prime))

        rotate_list = collections.deque(prime_digits)
        rotate_list_length = len(rotate_list)
        if rotate_list_length == 1:
            return_value += 1
            continue

        if len({"0", "2", "4", "5", "6", "8"}.intersection(prime_digits)) > 0:
            continue

        for rotate in range(1, rotate_list_length):
            rotate_list.rotate(1)
            if not mathhelper.is_prime(mathhelper.create_number(rotate_list)):
                break

            if rotate + 1 == rotate_list_length:
                return_value += 1

    return return_value
コード例 #2
0
ファイル: projecteuler.py プロジェクト: ogun/ProjectEuler
def problem43():
    """ Sub-string divisibility
    Find the sum of all 0 to 9 pandigital numbers with this property.

    """

    dividers = [1, 2, 3, 5, 7, 11, 13, 17]
    return_value = 0
    for permutation in itertools.permutations([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 10):
        if permutation[0] == 0:
            continue

        divisibility = True
        for start in range(1, 8):
            three_digits = permutation[start:start + 3]
            number = mathhelper.create_number(three_digits)
            if number % dividers[start] != 0:
                divisibility = False
                break

        if divisibility:
            return_value += mathhelper.create_number(permutation)

    return return_value
コード例 #3
0
ファイル: test_mathhelper.py プロジェクト: ogun/ProjectEuler
 def test_create_number(self):
     self.assertEqual(mathhelper.create_number(list("123")), 123)
     self.assertEqual(mathhelper.create_number(list("0123")), 123)
     self.assertEqual(mathhelper.create_number(list("9876")), 9876)
     self.assertEqual(mathhelper.create_number([4, 5, 6, 7, 8, 9]), 456789)