Python: Amicable Numbers
Python: Amicable Numbers
Problem No.21 on projectEuler
In this task we need to calculate the SUM of all divisors of N, from 1 to N.
Then we calculate the Sum of (sum of N divisors ) let’s say M .
Now if
For example, the proper divisors of A=220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore F(220) = 284. And the proper divisors of B=284 are 1, 2, 4, 71 and 142; so F(284) = 220. So F(A) =B and F(B)=A then A and B are amicable.
Definition:
If f(a) = b and f(b) = a, where a ≠ b, then a and b are an amicable pair and each of a and b are called amicable numbers.
In this task we will ask the user to enter a Range of numbers and we will search for all Amicable Numbers pairs in that range(from – to) if we fond one we will print out the number and the divisors list. The main function here is the one that get the sum of divisors, we will call it get_divisors_sum and we will examine Amicable with If statement.
Hint ..
To check if the sum of divisors from both said are equal we use (t2==x )
AND that this sum are not same we use (t1!=t2)
AND that we did not print the pair before we use: (t2 not in ami_pair)
The Code:
#Python: Amicable Numbers
#Problem No.21 on projectEuler
num1=int(input(‘The range Start from:’))
num2=int(input(‘The range Ends at:’))
t1=0
t2=0
l=[]
l1=[]
l2=[]
ami_pair=[]
def get_divisors_sum (num):
t=0
l=[]
for a in range (1,num):
if num%a==0 :
l.append(a)
t=t+a
return t,l
for x in range(num1,num2):
l1=[]
t1,l1=get_divisors_sum(x)
l2=[]
t2,l2=get_divisors_sum(t1)
if (t2==x) and (t1!=t2) and (t2 not in ami_pair):
print(‘\nget_divisors_sum({}) is {} divisors={}’.format(x,t1,l1))
print(‘\nget_divisors_sum({}) is {} divisors={}’.format(t1,t2,l2))
print(‘\nSo {} and {} are Amicable Numbers .’.format(t1,t2))
ami_pair.extend((t1,t2))