Я работал над поиском всех приводимых дробей для заданного целого числа n.
Например, если на входе указано число 5, на выходе будет 4, потому что 1/5, 2/5, 3 / 5 и 4/5 - все сокращенные дроби. 5/5 - это не уменьшенная дробь, потому что ее можно уменьшить до 1/1.
Я нашел решение онлайн (кредиты: geeksforgeeks), которое показано ниже, но я не понимаю, почему n обновляется каждый раз в то время как l oop
def phi(n):
# Initialize result as n
result = n
# Consider all prime factors
# of n and subtract their
# multiples from result
p = 2
while(p * p <= n):
# Check if p is a
# prime factor.
if (n % p == 0):
# If yes, then
# update n and result
while (n % p == 0):
n = int(n / p)
result -= int(result / p);
p += 1
# If n has a prime factor
# greater than sqrt(n)
# (There can be at-most
# one such prime factor)
if (n > 1):
result -= int(result / n)
return result