From ab6b90e725477f8cf43e50d7225dc374e564d4c0 Mon Sep 17 00:00:00 2001 From: Abhijit Patil Date: Tue, 1 Oct 2019 20:17:40 +0530 Subject: [PATCH 1/3] Create eulersTotient.py --- maths/eulersTotient.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 maths/eulersTotient.py diff --git a/maths/eulersTotient.py b/maths/eulersTotient.py new file mode 100644 index 000000000000..00bb26c2c890 --- /dev/null +++ b/maths/eulersTotient.py @@ -0,0 +1,26 @@ +# Eulers Totient function finds the number of relative primes of a number n from 1 to n +def totient(n): + isPrime = [True for i in range(n+1)] + totients = [i-1 for i in range(n+1)] + primes = [] + for i in range(2, n+1): + if (isPrime[i] == True): + primes.append(i) + for j in range(0, len(primes)): + if (i*primes[j] >= n): + break + isPrime[i*primes[j]] = False + + if (i%primes[j] == 0): + totients[i*primes[j]] = totients[i]*primes[j] + break + + totients[i*primes[j]] = totients[i]*(primes[j] - 1) + + return totients + +if __name__ == "__main__": + n = 10 + totientCalculation = totient(n) + for i in range(1, n): + print(i, totientCalculation[i], sep=" ") From 713be3d1c3be29267b7c75bd78a7efc7001d555e Mon Sep 17 00:00:00 2001 From: Abhijit Patil Date: Tue, 1 Oct 2019 20:44:21 +0530 Subject: [PATCH 2/3] Rename eulersTotient.py to eulers_totient.py --- maths/{eulersTotient.py => eulers_totient.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename maths/{eulersTotient.py => eulers_totient.py} (100%) diff --git a/maths/eulersTotient.py b/maths/eulers_totient.py similarity index 100% rename from maths/eulersTotient.py rename to maths/eulers_totient.py From a1107aa9b977e19c7a5e92a6d4c3842b8dcf7630 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Sun, 1 Dec 2019 06:52:25 +0100 Subject: [PATCH 3/3] Update eulers_totient.py --- maths/eulers_totient.py | 49 ++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/maths/eulers_totient.py b/maths/eulers_totient.py index 00bb26c2c890..6a35e69bde0b 100644 --- a/maths/eulers_totient.py +++ b/maths/eulers_totient.py @@ -1,26 +1,45 @@ # Eulers Totient function finds the number of relative primes of a number n from 1 to n -def totient(n): - isPrime = [True for i in range(n+1)] - totients = [i-1 for i in range(n+1)] +def totient(n: int) -> list: + is_prime = [True for i in range(n + 1)] + totients = [i - 1 for i in range(n + 1)] primes = [] - for i in range(2, n+1): - if (isPrime[i] == True): + for i in range(2, n + 1): + if is_prime[i]: primes.append(i) for j in range(0, len(primes)): - if (i*primes[j] >= n): + if i * primes[j] >= n: break - isPrime[i*primes[j]] = False + is_prime[i * primes[j]] = False - if (i%primes[j] == 0): - totients[i*primes[j]] = totients[i]*primes[j] + if i % primes[j] == 0: + totients[i * primes[j]] = totients[i] * primes[j] break - totients[i*primes[j]] = totients[i]*(primes[j] - 1) - + totients[i * primes[j]] = totients[i] * (primes[j] - 1) + return totients + +def test_totient() -> None: + """ + >>> n = 10 + >>> totient_calculation = totient(n) + >>> for i in range(1, n): + ... print(f"{i} has {totient_calculation[i]} relative primes.") + 1 has 0 relative primes. + 2 has 1 relative primes. + 3 has 2 relative primes. + 4 has 2 relative primes. + 5 has 4 relative primes. + 6 has 2 relative primes. + 7 has 6 relative primes. + 8 has 4 relative primes. + 9 has 6 relative primes. + """ + pass + + if __name__ == "__main__": - n = 10 - totientCalculation = totient(n) - for i in range(1, n): - print(i, totientCalculation[i], sep=" ") + import doctest + + doctest.testmod()