# Distinct Prime Factors of a given number N

Given a number **N**, the task is to find the distinct Prime Factors of **N**.

**Examples:**

Input:N = 12Output:2 3Explanation:The factors of 12 are 1, 2, 3, 4, 6, 12.

Among these the distinct prime factors are 2 and 3.

Input:N = 39Output:3 13

**Approach:** The approach is to use a map to check whether a given factor of the number has occurred earlier or not. Now follow the below steps to solve this problem:

- Create a map
**visited**to keep track of all previous prime factors. - Create a variable
**C**, and initialise it with 2. - While
**N**is divisible by**C**, print**C**if**C**is not present in the map. Now divide**N**by**C**. Also increment**C**by 1.

Below is the implementation of the above approach:

## C++

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to find distinct prime factor` `// of a number N` `void` `distinctPrimeFactors(` `int` `N)` `{` ` ` `if` `(N < 2) {` ` ` `cout << -1;` ` ` `}` ` ` `int` `c = 2;` ` ` `unordered_map<` `int` `, ` `bool` `> visited;` ` ` `while` `(N > 1) {` ` ` `if` `(N % c == 0) {` ` ` `if` `(!visited) {` ` ` `cout << c << ` `" "` `;` ` ` `visited = 1;` ` ` `}` ` ` `N /= c;` ` ` `}` ` ` `else` ` ` `c++;` ` ` `}` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 39;` ` ` `distinctPrimeFactors(N);` ` ` `return` `0;` `}` |

## Java

`// Java program for the above approach` `import` `java.util.*;` `public` `class` `GFG` `{` ` ` `// Function to find distinct prime factor` ` ` `// of a number N` ` ` `static` `void` `distinctPrimeFactors(` `int` `N)` ` ` `{` ` ` `if` `(N < ` `2` `) {` ` ` `System.out.print(-` `1` `);` ` ` `}` ` ` `int` `c = ` `2` `;` ` ` `// Create a new dictionary of` ` ` `// strings, with string keys.` ` ` `HashMap<Integer, Boolean> visited = ` `new` `HashMap<>();` ` ` `for` `(` `int` `i = ` `0` `; i < N; i++) {` ` ` `visited.put(i, ` `false` `);` ` ` `}` ` ` `while` `(N > ` `1` `) {` ` ` `if` `(N % c == ` `0` `) {` ` ` `if` `(visited.containsKey(c)){` ` ` `if` `(!visited.get(c)) {` ` ` `System.out.print(c + ` `" "` `);` ` ` `visited.put(c, ` `true` `);` ` ` `}` ` ` `}` ` ` `N /= c;` ` ` `}` ` ` `else` ` ` `c++;` ` ` `}` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `main(String[] args)` ` ` `{` ` ` `int` `N = ` `39` `;` ` ` `distinctPrimeFactors(N);` ` ` `}` `}` `// This code is contributed by Samim Hossain Mondal` |

## Python3

`# pythn3 program for the above approach` `# Function to find distinct prime factor` `# of a number N` `def` `distinctPrimeFactors(N):` ` ` `if` `(N < ` `2` `):` ` ` `print` `(` `-` `1` `)` ` ` `c ` `=` `2` ` ` `visited ` `=` `{}` ` ` `while` `(N > ` `1` `):` ` ` `if` `(N ` `%` `c ` `=` `=` `0` `):` ` ` `if` `(` `not` `c ` `in` `visited):` ` ` `print` `(c, end` `=` `" "` `)` ` ` `visited ` `=` `1` `if` `c ` `in` `visited ` `else` `0` ` ` `N ` `/` `/` `=` `c` ` ` `else` `:` ` ` `c ` `+` `=` `1` `# Driver Code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` `N ` `=` `39` ` ` `distinctPrimeFactors(N)` `# This code is contributed by rakeshsahni` |

## C#

`// C# program for the above approach` `using` `System;` `using` `System.Collections.Generic;` `class` `GFG` `{` ` ` `// Function to find distinct prime factor` ` ` `// of a number N` ` ` `static` `void` `distinctPrimeFactors(` `int` `N)` ` ` `{` ` ` `if` `(N < 2) {` ` ` `Console.Write(-1);` ` ` `}` ` ` `int` `c = 2;` ` ` `// Create a new dictionary of` ` ` `// strings, with string keys.` ` ` `Dictionary<` `int` `, ` `bool` `> visited =` ` ` `new` `Dictionary<` `int` `, ` `bool` `>();` ` ` `for` `(` `int` `i = 0; i < N; i++) {` ` ` `visited[i] = ` `false` `;` ` ` `}` ` ` `while` `(N > 1) {` ` ` `if` `(N % c == 0) {` ` ` `if` `(visited.ContainsKey(c)){` ` ` `if` `(!visited) {` ` ` `Console.Write(c + ` `" "` `);` ` ` `visited = ` `true` `;` ` ` `}` ` ` `}` ` ` `N /= c;` ` ` `}` ` ` `else` ` ` `c++;` ` ` `}` ` ` `}` ` ` `// Driver Code` ` ` `public` `static` `void` `Main()` ` ` `{` ` ` `int` `N = 39;` ` ` `distinctPrimeFactors(N);` ` ` `}` `}` `// This code is contributed by Samim Hossain Mondal.` |

## Javascript

`<script>` ` ` `// JavaScript program for the above approach` ` ` `// Function to find distinct prime factor` ` ` `// of a number N` ` ` `const distinctPrimeFactors = (N) => {` ` ` `if` `(N < 2) {` ` ` `document.write(-1);` ` ` `}` ` ` `let c = 2;` ` ` `let visited = {};` ` ` `while` `(N > 1) {` ` ` `if` `(N % c == 0) {` ` ` `if` `(!(c ` `in` `visited)) {` ` ` `document.write(`${c} `);` ` ` `visited = 1;` ` ` `}` ` ` `N = parseInt(N / c);` ` ` `}` ` ` `else` ` ` `c++;` ` ` `}` ` ` `}` ` ` `// Driver Code` ` ` `let N = 39;` ` ` `distinctPrimeFactors(N);` `// This code is contributed by rakeshsahni` `</script>` |

**Output**

3 13

* Time Complexity:* O(N)

**Auxiliary Space:****O(N**

^{1/2})

**Efficient Approach: **This approach is similar to above approach where we find prime factors. The only difference is that we traverse from **2** to **sqrt(n)** to find all prime factors since we know that is sufficient for checking for prime numbers as well. If the number is still found to be greater than 2 then it is prime and we need to print it as well.

## C++14

`// C++ program for the above approach` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function to find distinct prime factor` `// of a number N` `void` `distinctPrimeFactors(` `int` `N)` `{` ` ` `if` `(N < 2) {` ` ` `cout << -1;` ` ` `return` `;` ` ` `}` ` ` ` ` `unordered_map<` `int` `, ` `bool` `> visited;` ` ` ` ` `for` `(` `int` `i=2;i*i<=N;i++)` ` ` `{` ` ` `while` `(N%i==0)` ` ` `{` ` ` `if` `(!visited[i])` ` ` `{` ` ` `cout<<i<<` `" "` `;` ` ` `visited[i]=1;` ` ` `}` ` ` `N/=i;` ` ` `}` ` ` `}` ` ` `if` `(N>2)` ` ` `cout<<N;` `}` `// Driver Code` `int` `main()` `{` ` ` `int` `N = 315;` ` ` `distinctPrimeFactors(N);` ` ` `return` `0;` `}` |

* Time Complexity: *O(N^(1/2))

* Auxiliary Space: *O(N^(1/2))