Почему переменная `n` в Totient Function обновляется в каждом l oop? - PullRequest
0 голосов
/ 12 апреля 2020

Я работал над поиском всех приводимых дробей для заданного целого числа 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

1 Ответ

0 голосов
/ 12 апреля 2020

Проверьте эту ссылку на pythontutor

n обновляется каждый раз p является основным фактором. Это означает, что число дробей можно уменьшить до меньшего простого числа. Таким образом, мы можем думать о n как о наименьшем простом множителе в начальном запросе. Мы можем думать о phi(16) например. Если n - наименьшее простое число и n > 1, то может существовать только одно простое число, иначе оно было бы поймано в то время как -l oop.

Надеюсь, это поможет !!!

...