Программа для поиска приветливых чисел
Назовём натуральное число приветливым, если для любого натурального n⩾2 энная цифра этого числа равна остатку этого числа при делении на n . Например, число 2123 является приветливым, так как даёт остаток 1 при делении на 2, остаток 2 при делении на 3 и остаток 3 при делении на 4.
Вот все приветливые числа, не превышающие 10 млн:
10 11 20 21 30 31 40 41 50 51 60 61 70 71 80 81 90 91 211 300 302 511 600 602 811 900 902 1002 1022 1101 1121 2103 2123 3000 3020 4002 4022 4101 4121 5103 5123 6000 6020 7002 7022 7101 7121 8103 8123 9000 9020 11013 11031 11113 11131 11213 11231 20004 20022 20104 20122 20204 20222 30000 30100 30200 41013 41031 41113 41131 41213 41231 50004 50022 50104 50122 50204 50222 60000 60100 60200 71013 71031 71113 71131 71213 71231 80004 80022 80104 80122 80204 80222 90000 90100 90200 101044 110133 212105 300000 302222 311311 401044 410133 512105 600000 602222 611311 701044 710133 812105 900000 902222 911311 1123151 2121353 3103035 5010040 5012146 5113015 7020020 7022126
Разумеется, эти числа были найдены с помощью программы:
def is_friendly(number):
str_number = str(number)
length = len(str_number)
for i in range(2, length + 1):
if int(str_number[i - 1]) != number % i:
return False
return True
def main():
for number in range(10, 10000001):
if is_friendly(number):
print(number)
if __name__ == "__main__":
main()
Однако программа эта работает чудовищно медленно, поэтому не годится для поиска приветливых чисел, превышающих 10 млн.
Пожалуйста, помогите оптимизировать код и ускорить программу. Заранее благодарю!