# encoding: utf-8
# https://projecteuler.net/index.php?section=problems
"""
The sum of the squares of the first ten natural numbers is,

12+22+...+102=385
The square of the sum of the first ten natural numbers is,

(1+2+...+10)2=552=3025
Hence the difference between the sum of the squares of the first ten natural numbers
 and the square of the sum is 3025−385=2640.
Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

"""
# sum_sq = 0
# sq_sum = 0
# i = int(input('hier '))
#
# for n in range(0, i + 1):
#     sum_sq += n ** 2  # возводим в квадрат
#     sq_sum += n  # ссумируем
#
# print(sq_sum ** 2 - sum_sq)
# print('---------------------------------')

'''
Выписав первые шесть простых чисел, получим 2, 3, 5, 7, 11 и 13. Очевидно, что 6-ое простое число - 13.

Какое число является 10001-ым простым числом?

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?
'''

cnt = 1
lst = []  # создаем пустой список для хранения простых чисел

while len(lst) <= 10001:  # мотаем круги пока не найдём  1001-ое  простое число
    cnt += 1  # число считает круги
    for i in lst:  # пробегаем все числа от 2 до числа до которого досчитали
        if cnt % i == 0:  # проверка на остаток, если нет, то это не простое
            break  # прерывает
    else:
        lst.append(cnt)  # если делителей нет, добавляем число в список

print(len(lst))
print(lst[10000])  # выводим на экран список

"""
2520 - самое маленькое число, которое делится без остатка на все числа от 1 до 10.
Какое самое маленькое число делится нацело на все числа от 1 до 20?

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
"""
# n = int(input('введите число '))
# a = n**n
# lst = []
#
# for i in range(1, a):
#     for j in range(1, n + 1):
#         if i % j == 0:
#             lst.append(i)
#             continue
#         else:
#             break
#
# b = len(lst)
#
# for j in range(1, b):
#     for k in range(1, n+1):
#         t = k + j
#         if lst[j] == lst[t]:
#             print(lst[j])
#             break
#         else:
#             continue

'''
Тройка Пифагора - три натуральных числа a < b < c, для которых выполняется равенство

a2 + b2 = c2
Например, 32 + 42 = 9 + 16 = 25 = 52.

Существует только одна тройка Пифагора, для которой a + b + c = 1000.
Найдите произведение abc.
'''

# for a in range(1, 1000):
#     for b in range(1, 1000):
#         c = ((a**2) + (b**2))**.5
#         if a + b + c == 1000:
#             if a < b < c:
#                 print(a, b, c)


'''
Сумма простых чисел меньше 10 равна 2 + 3 + 5 + 7 = 17.
Найдите сумму всех простых чисел меньше двух миллионов.
'''

# lst = [2]
#
# for i in range(3, 200000, 2):
#     if (i > 10) and (i % 10 == 5):
#         continue
#     for j in lst:
#         if i % j == 0:
#             break
#     else:
#         lst.append(i)
#
# print(sum(lst))


# lst = [2]
# for i in range(3, 2000000 + 1, 2):
#     if (i > 10) and (i % 10 == 5):
#         continue
#     for j in lst:
#         if j * j - 1 > i:
#             lst.append(i)
#             break
#         if i % j == 0:
#             break
#     else:
#         lst.append(i)
# print(sum(lst))


'''
Простые делители числа 13195 - это 5, 7, 13 и 29.
Каков самый большой делитель числа 600851475143, являющийся простым числом?
'''

#  #variant 1
# def prime(n):
#     if n % 2 == 0:
#         return n == 2
#     d = 3
#     while d * d <= n and n % d != 0:
#         d += 2
#     return d * d > n
#
#
# X = 600851475143
#
# cnt = 1
# lst = []
#
#
# while X <= 600851475143:  # мотаем круги
#     cnt += 1  # число считает круги
#     if 600851475143 % cnt == 0:
#         if prime(cnt):
#             lst.append(cnt)
#             if 600851475143 % cnt == 0:
#                 print(cnt)
#
#
# print(lst[-1])  # ждать очень долго, я дождался


#  # variant 2 work in 5sek
#
# def prime_lst(b=10000):
#     lis = [2]
#     for k in range(3, b + 1, 2):
#         if (k > 10) and (k % 10 == 5):
#             continue
#         for j in lis:
#             if j * j - 1 > k:
#                 lis.append(k)
#                 break
#             if k % j == 0:
#                 break
#         else:
#             lis.append(k)
#     return lis
#
#
# X = 600851475143
# a = int((X**.5)+1)
# lst = []
#
# for i in prime_lst(a):
#     if 600851475143 % i == 0:
#         lst.append(i)
#
# print(lst[-1])
#
#

'''
Наибольшее произведение четырех последовательных цифр в нижеприведенном 1000-значном числе равно 9 × 9 × 8 × 9 = 5832.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

Найдите наибольшее произведение тринадцати последовательных цифр в данном числе.
'''
#
# A = '731671765313306249192251196744265747423553491949349698352031277450632623957831801698480186947885184' \
#     '385861560789112949495459501737958331952853208805511125406987471585238630507156932909632952274430435576' \
#     '6896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035' \
#     '89072962904915604407723907138105158593079608667017242712188399879790879227492190169972088809377665727333' \
#     '00105336788122023542180975125454059475224352584907711670556013604839586446706324415722155397536978179778' \
#     '461740649551492908625693219784686224828397224137565705605749026140797296865241453510047482166370484403199' \
#     '890008895243450658541227588666881164271714799244429282308634656748139191231628245861786645835912456652947' \
#     '65456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230' \
#     '987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520' \
#     '005593572972571636269561882670428252483600823257530420752963450'
#
# lst = []  # список в нём лежат преобразованые  отдельные числа, с которыми можно работать
# lst_2 = []  # список всех множеств
#
#
# def zif():  # создаём список нормальный
#     c = [A]  # переводим в список, но в нём одно значение
#     for j in c[0]:
#         lst.append(int(j))
#
#
# def umn():  # перемножаем все значения и кладём во 2 список
#     x = 1  # именно икс будет, то что будем класть
#     y = 12  # это 13 минус 1
#     z = len(A)
#     for n in range(0, z - 13):
#         y += 1
#         for i in lst[n: y]:
#             x = x * i
#         lst_2.append(x)
#         x = 1
#
#
# zif()
# umn()
# b = lst_2.index(max(lst_2))
# print(lst[b:b+13], max(lst_2))
