# ## Алгоритмы # Ну хорошо, а можно ли придумать другой алгоритм нахождения дружественных чисел? # Конечно да # # Я даже предлагаю использовать библиотеку **sympy**. Взять функцию от туда и сравнить по скорости обе. # # Единственный недостаток. У библиотеки есть функция не нахождение дружественных чисел, а их проверка! Поэтому, самостоятельно создадим двухмерную итерацию. # In[23]: from sympy.ntheory.factor_ import is_amicable for i in range(1, 1000): for j in range(1, 1000): if (is_amicable(i, j)): print(i, j) # Попробуйте воссоздать это на с++ # # Ведь на Python, циклы работают медленно, поэтому даже замерить в сравнении будет тяжело. Не думаю, что числа получатся годными для сравнения, но попробуем. # In[24]: get_ipython().run_line_magic('time', 'is_amicable(1184,1210)') # In[25]: get_ipython().run_line_magic('time', 'AmicableNumber(1184)') # Так, мы видим, что нахождение пары для ЧИСЛА намного дольше, чем проверка уже готовой пары.
def test_is_amicable(): assert is_amicable(173, 129) is False assert is_amicable(220, 284) is True assert is_amicable(8756, 8756) is False
def test_is_amicable(): assert is_amicable(173, 129) is False assert is_amicable(220, 284) is True assert is_amicable(8756, 8756) is False