GeeksforGeeks App
Open App
Browser
Continue

Check if Euler Totient Function is same for a given number and twice of that number

Given an integer N, the task is to check whether the Euler’s Totient Function of N and 2 * N are the same or not. If they are found to be the same, then print “Yes”. Otherwise, print “No”.

Examples:

Input: N = 9
Output: Yes
Explanation:
Let phi() be the Euler Totient function
Since 1, 2, 4, 5, 7, 8 have GCD 1 with 9. Therefore, phi(9) = 6.
Since 1, 5, 7, 11, 13, 17 have GCD 1 with 18. Therefore, phi(18) = 6.
Therefore, phi(9) and phi(18) are equal.

Input: N = 14
Output: No
Explanation:
Let phi() be the Euler Totient function, then
Since 1, 3 have GCD 1 with 4. Therefore, phi(4) = 2.
Since 1, 3, 5, 7 have GCD 1 with 8. Therefore, phi(8) = 4.
Therefore, phi(4) and phi(8) are not the same.

Naive Approach: The simplest approach is to find Euler’s Totient Function of N and 2 * N. If they are the same, then print “Yes”. Otherwise, print “No”.

Below is the implementation of the above approach:

C++

 `// C++ program of the above approach` `#include ``using` `namespace` `std;` `// Function to find the Euler's``// Totient Function``int` `phi(``int` `n)``{``    ``// Initialize result as N``    ``int` `result = 1;` `    ``// Consider all prime factors``    ``// of n and subtract their``    ``// multiples from result``    ``for` `(``int` `p = 2; p < n; p++) {``        ``if` `(__gcd(p, n) == 1) {``            ``result++;``        ``}``    ``}` `    ``// Return the count``    ``return` `result;``}` `// Function to check if phi(n)``// is equals phi(2*n)``bool` `sameEulerTotient(``int` `n)``{` `    ``return` `phi(n) == phi(2 * n);``}` `// Driver Code``int` `main()``{``    ``int` `N = 13;``    ``if` `(sameEulerTotient(N))``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;``}`

Java

 `// Java program of``// the above approach``import` `java.util.*;``class` `GFG{` `// Function to find the Euler's``// Totient Function``static` `int` `phi(``int` `n)``{``  ``// Initialize result as N``  ``int` `result = ``1``;` `  ``// Consider all prime factors``  ``// of n and subtract their``  ``// multiples from result``  ``for` `(``int` `p = ``2``; p < n; p++)``  ``{``    ``if` `(__gcd(p, n) == ``1``)``    ``{``      ``result++;``    ``}``  ``}` `  ``// Return the count``  ``return` `result;``}` `// Function to check if phi(n)``// is equals phi(2*n)``static` `boolean` `sameEulerTotient(``int` `n)``{``  ``return` `phi(n) == phi(``2` `* n);``}``  ` `static` `int` `__gcd(``int` `a, ``int` `b) ``{ ``  ``return` `b == ``0` `? a :__gcd(b, a % b);    ``}``  ` `// Driver Code``public` `static` `void` `main(String[] args)``{``  ``int` `N = ``13``;``  ``if` `(sameEulerTotient(N))``    ``System.out.print(``"Yes"``);``  ``else``    ``System.out.print(``"No"``);``}``}` `// This code is contributed by Rajput-Ji`

Python3

 `# Python3 program of the``# above approach` `# Function to find the Euler's``# Totient Function``def` `phi(n):``    ` `    ``# Initialize result as N``    ``result ``=` `1` `    ``# Consider all prime factors``    ``# of n and subtract their``    ``# multiples from result``    ``for` `p ``in` `range``(``2``, n):``        ``if` `(__gcd(p, n) ``=``=` `1``):``            ``result ``+``=` `1` `    ``# Return the count``    ``return` `result` `# Function to check if phi(n)``# is equals phi(2*n)``def` `sameEulerTotient(n):``    ` `    ``return` `phi(n) ``=``=` `phi(``2` `*` `n)` `def` `__gcd(a, b):``    ` `    ``return` `a ``if` `b ``=``=` `0` `else` `__gcd(b, a ``%` `b)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``N ``=` `13``    ` `    ``if` `(sameEulerTotient(N)):``        ``print``(``"Yes"``)``    ``else``:``        ``print``(``"No"``)` `# This code is contributed by Amit Katiyar`

C#

 `// C# program of``// the above approach``using` `System;``class` `GFG{` `// Function to find the Euler's``// Totient Function``static` `int` `phi(``int` `n)``{``  ``// Initialize result as N``  ``int` `result = 1;` `  ``// Consider all prime factors``  ``// of n and subtract their``  ``// multiples from result``  ``for` `(``int` `p = 2; p < n; p++)``  ``{``    ``if` `(__gcd(p, n) == 1)``    ``{``      ``result++;``    ``}``  ``}` `  ``// Return the count``  ``return` `result;``}` `// Function to check if phi(n)``// is equals phi(2*n)``static` `bool` `sameEulerTotient(``int` `n)``{``  ``return` `phi(n) == phi(2 * n);``}``  ` `static` `int` `__gcd(``int` `a, ``int` `b) ``{ ``  ``return` `b == 0 ? a : __gcd(b, a % b);    ``}``  ` `// Driver Code``public` `static` `void` `Main(String[] args)``{``  ``int` `N = 13;``  ``if` `(sameEulerTotient(N))``    ``Console.Write(``"Yes"``);``  ``else``    ``Console.Write(``"No"``);``}``}` `// This code is contributed by shikhasingrajput`

Javascript

 ``

Output:

`Yes`

Time Complexity: O(N)
Auxiliary Space: O(1)

Efficient Approach: To optimize the above approach, the key observation is that there is no need to calculate the Euler’s Totient Function as only odd numbers follow the property phi(N) = phi(2*N), where phi() is the Euler’s Totient Function.

Therefore, the idea is to check if N is odd or not. If found to be true, print “Yes”. Otherwise, print “No”.

Below is the implementation of the above approach:

C++

 `// C++ program of the above approach` `#include ``using` `namespace` `std;` `// Function to check if phi(n)``// is equals phi(2*n)``bool` `sameEulerTotient(``int` `N)``{``    ``// Return if N is odd``    ``return` `(N & 1);``}` `// Driver Code``int` `main()``{``    ``int` `N = 13;` `    ``// Function Call``    ``if` `(sameEulerTotient(N))``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;``}`

Java

 `// Java program of the above approach``class` `GFG{` `// Function to check if phi(n)``// is equals phi(2*n)``static` `int` `sameEulerTotient(``int` `N)``{``    ` `    ``// Return if N is odd``    ``return` `(N & ``1``);``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `N = ``13``;` `    ``// Function call``    ``if` `(sameEulerTotient(N) == ``1``)``        ``System.out.print(``"Yes"``);``    ``else``        ``System.out.print(``"No"``);``}``}` `// This code is contributed by Dewanti`

Python3

 `# Python3 program of the above approach` `# Function to check if phi(n)``# is equals phi(2*n)``def` `sameEulerTotient(N):``    ` `    ``# Return if N is odd``    ``return` `(N & ``1``);` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``N ``=` `13``;` `    ``# Function call``    ``if` `(sameEulerTotient(N) ``=``=` `1``):``        ``print``(``"Yes"``);``    ``else``:``        ``print``(``"No"``);` `# This code is contributed by Amit Katiyar`

C#

 `// C# program of``// the above approach``using` `System;``class` `GFG{` `// Function to check if phi(n)``// is equals phi(2*n)``static` `int` `sameEulerTotient(``int` `N)``{``  ``// Return if N is odd``  ``return` `(N & 1);``}` `// Driver code``public` `static` `void` `Main(String[] args)``{``  ``int` `N = 13;` `  ``// Function call``  ``if` `(sameEulerTotient(N) == 1)``    ``Console.Write(``"Yes"``);``  ``else``    ``Console.Write(``"No"``);``}``}` `// This code is contributed by Rajput-Ji`

Javascript

 ``

Output:

`Yes`

Time Complexity: O(1)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up