Open In App

# Generate an array having sum of Euler Totient Function of all elements equal to N

Given a positive integer N, the task is to generate an array such that the sum of the Euler Totient Function of each element is equal to N.

Examples:

Input: N = 6
Output: 1 6 2 3

Input: N = 12
Output: 1 12 2 6 3 4

Approach: The given problem can be solved based on the divisor sum property of the Euler Totient Function, i.e.,

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach` `#include ``using` `namespace` `std;` `// Function to construct the array such``// the sum of values of Euler Totient``// functions of all array elements is N``void` `constructArray(``int` `N)``{``    ``// Stores the resultant array``    ``vector<``int``> ans;` `    ``// Find divisors in sqrt(N)``    ``for` `(``int` `i = 1; i * i <= N; i++) {` `        ``// If N is divisible by i``        ``if` `(N % i == 0) {` `            ``// Push the current divisor``            ``ans.push_back(i);` `            ``// If N is not a``            ``// perfect square``            ``if` `(N != (i * i)) {` `                ``// Push the second divisor``                ``ans.push_back(N / i);``            ``}``        ``}``    ``}` `    ``// Print the resultant array``    ``for` `(``auto` `it : ans) {``        ``cout << it << ``" "``;``    ``}``}` `// Driver Code``int` `main()``{``    ``int` `N = 12;` `    ``// Function Call``    ``constructArray(N);` `    ``return` `0;``}`

## Java

 `// Java program for the above approach``import` `java.util.*;` `class` `GFG{``    ` `// Function to construct the array such``// the sum of values of Euler Totient``// functions of all array elements is N``static` `void` `constructArray(``int` `N)``{``    ` `    ``// Stores the resultant array``    ``ArrayList ans = ``new` `ArrayList();` `    ``// Find divisors in sqrt(N)``    ``for``(``int` `i = ``1``; i * i <= N; i++)``    ``{``        ` `        ``// If N is divisible by i``        ``if` `(N % i == ``0``)``        ``{``            ` `            ``// Push the current divisor``            ``ans.add(i);` `            ``// If N is not a``            ``// perfect square``            ``if` `(N != (i * i))``            ``{``                ` `                ``// Push the second divisor``                ``ans.add(N / i);``            ``}``        ``}``    ``}` `    ``// Print the resultant array``    ``for``(``int` `it : ans)``    ``{``        ``System.out.print(it + ``" "``);``    ``}``}` `// Driver Code``public` `static` `void` `main(String[] args)``{``    ``int` `N = ``12``;` `    ``// Function Call``    ``constructArray(N);``}``}` `// This code is contributed by splevel62`

## Python3

 `# Python3 program for the above approach``from` `math ``import` `sqrt` `# Function to construct the array such``# the sum of values of Euler Totient``# functions of all array elements is N``def` `constructArray(N):``    ` `    ``# Stores the resultant array``    ``ans ``=` `[]` `    ``# Find divisors in sqrt(N)``    ``for` `i ``in` `range``(``1``, ``int``(sqrt(N)) ``+` `1``, ``1``):``        ` `        ``# If N is divisible by i``        ``if` `(N ``%` `i ``=``=` `0``):``            ` `            ``# Push the current divisor``            ``ans.append(i)` `            ``# If N is not a``            ``# perfect square``            ``if` `(N !``=` `(i ``*` `i)):``                ` `                ``# Push the second divisor``                ``ans.append(N ``/` `i)` `    ``# Print the resultant array``    ``for` `it ``in` `ans:``        ``print``(``int``(it), end ``=` `" "``)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``N ``=` `12``    ` `    ``# Function Call``    ``constructArray(N)` `# This code is contributed by ipg2016107`

## C#

 `// C# program for the above approach``using` `System;``using` `System.Collections.Generic;``class` `GFG{``    ` `// Function to construct the array such``// the sum of values of Euler Totient``// functions of all array elements is N``static` `void` `constructArray(``int` `N)``{``    ` `    ``// Stores the resultant array``    ``List<``int``> ans = ``new` `List<``int``>();` `    ``// Find divisors in sqrt(N)``    ``for``(``int` `i = 1; i * i <= N; i++)``    ``{``        ` `        ``// If N is divisible by i``        ``if` `(N % i == 0)``        ``{``            ` `            ``// Push the current divisor``            ``ans.Add(i);` `            ``// If N is not a``            ``// perfect square``            ``if` `(N != (i * i))``            ``{``                ` `                ``// Push the second divisor``                ``ans.Add(N / i);``            ``}``        ``}``    ``}` `    ``// Print the resultant array``    ``foreach``(``int` `it ``in` `ans)``    ``{``        ``Console.Write(it + ``" "``);``    ``}``}` `// Driver Code``public` `static` `void` `Main()``{``    ``int` `N = 12;` `    ``// Function Call``    ``constructArray(N);``}``}` `// This code is contributed by ukasp`

## Javascript

 ``

Output:

`1 12 2 6 3 4`

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