Ваша проблема уже почти решена ... просто выведите все пары:
for x in my_dict:
y = my_dict[x]
if my_dict.get(y) == x:
# x/y is an amicable pair
...
обратите внимание, что каждая пара будет извлечена дважды (как x
/ y
, так и y
/ [ 114]) и совершенные числа (числа, являющиеся суммой их делителей) только один раз; не уверен из текста вашей проблемы, если 6/6 считается дружной парой или нет.
Как насчет
double log_subtract(double x, double y) {
if(x <= y)
// error!! computing the log of a negative number
if(y == neginf)
return x;
return x + log1p(-exp(y-x));
}
Это просто на основе какой-то быстрой математики, которую я сделал ...