<file_sep># coding=utf-8
from TimeIt import timeit
'''
Задача 3. Наибольший простой делитель

Простые делители числа 13195 - это 5, 7, 13 и 29.

Каков самый большой делитель числа 600851475143, являющийся простым числом?
'''
@timeit
def get_greatest_divisor():
    max_simple_digit = 0
    result = 0
    super_num = 600851475143
    test = 10000

    for num in range(test):
        if num%2 == 0 or num % 5 == 0 or num % 3 == 0:
            continue
        else:
            result = num
            for digit in range(1, num):
                if digit != num and digit != 1 and num % digit == 0:
                    result = 0
                else:
                    if max_simple_digit < result:
                        max_simple_digit = result

    print(max_simple_digit)


get_greatest_divisor()
#5244.12 ms (отвратительно)

<file_sep># coding=utf-8
from TimeIt import timeit
"""
Задача 4. Наибольшее произведение-палиндром

Число-палиндром с обеих сторон (справа налево и слева направо) читается одинаково.
Самое большое число-палиндром, полученное умножением двух двузначных чисел – 9009 = 91 × 99.

Найдите самый большой палиндром, полученный умножением двух трехзначных чисел.
"""
def is_poly(num):
    start = str(num)
    end = len(start) - 1
    for i in range(0, end):
        if start[i] != start[end - i]:
            return False

    return True

@timeit
def poly_detected():
    max = 0
    for i in range(1000, 100, -1):
        for j in range(1000, 100, -1):
            tmp = i * j
            if tmp > max and is_poly(tmp):
                max = tmp
    return max


print(poly_detected())
# 193.76 ms


<file_sep># coding=utf-8
from TimeIt import timeit
'''
Задача 1. Числа, кратные 3 или 5

Если выписать все натуральные числа меньше 10, кратные 3 или 5, то получим 3, 5, 6 и 9. Сумма этих чисел - 23.

Найдите сумму всех чисел меньше 1000, кратных 3 или 5.
'''
@timeit
def sum1000():
    sum = 0
    for number in range(1000):
        if number % 3 == 0 or number % 5 == 0:
            sum += number
    return sum


print(sum1000())
#0.43 ms
<file_sep># coding=utf-8
from TimeIt import timeit
'''
Задача 2. Четные числа Фибоначчи

Каждый следующий элемент ряда Фибоначчи получается при сложении двух предыдущих. Начиная с 1 и 2, первые 10 элементов будут:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

Найдите сумму всех четных элементов ряда Фибоначчи, которые не превышают четыре миллиона.
'''
@timeit
def sumFib():
    first = 0
    second = 1
    sum = 0
    while sum < 4000000:
        tmp = first + second
        first = second
        second = tmp
        if second % 2 == 0:
            sum += second
    return sum


print(sumFib())
#0.03 ms

