Given an positive large integer n. Count the number of positive divisors of n^{2} which are not divisible by any **divisor** of n(1 <= n <= 10^{12}).

Input:6Output:5ExplanationTotal divisors of 6^{2}are 9 i.e., 1, 2, 3, 4, 6, 9, 12, 18, 36 Total divisors of '6' are 4, 1, 2, 3, 6 Total divisor of '36' which are not divisible by divisors of '6' are '5' i.e., 4, 9, 12, 18, 36Input:8Output:3

**Simple** approach is to traverse for every divisor of n^{2} and count only those divisors which are not divisor of ‘n’. Time complexity of this approach is O(n).

**Efficient** approach is to use prime factorization to count total divisors of n^{2}. A number ‘n’ can be represented as product of primes . Refer this to understand more.

Let for some primes p_{1}and p_{2}. Squaring both the sides Total factors of n^{2}will be, Total factors of 'n' will be, Difference between the two gives the required answer

## C++

`// C++ program to count number of ` `// divisors of n^2 which are not ` `// divisible by divisor of n ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `// Function to count divisors of n^2 ` `// having no factors of 'n' ` `int` `factors(` `long` `long` `n) ` `{ ` ` ` `unordered_map<` `int` `, ` `int` `> prime; ` ` ` `for` `(` `int` `i = 2; i <= ` `sqrt` `(n); ++i) { ` ` ` `while` `(n % i == 0) { ` ` ` ` ` `// Increment count of i-th prime divisor ` ` ` `++prime[i]; ` ` ` ` ` `// Find next prime divisor ` ` ` `n = n / i; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Increment count if divisor still remains ` ` ` `if` `(n > 2) ` ` ` `++prime[n]; ` ` ` ` ` `// Initialize variable for counting the factors ` ` ` `// of n^2 and n as ans1 and ans2 respectively ` ` ` `int` `ans1 = 1, ans2 = 1; ` ` ` ` ` `// Range based for-loop ` ` ` `for` `(` `auto` `it : prime) { ` ` ` ` ` `// Use formula as discussed in above ` ` ` `ans1 *= 2 * it.second + 1; ` ` ` `ans2 *= it.second + 1; ` ` ` `} ` ` ` ` ` `// return the difference of answers ` ` ` `return` `ans1 - ans2; ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `long` `long` `n = 5; ` ` ` `cout << factors(n) << endl; ` ` ` `n = 8; ` ` ` `cout << factors(n); ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Java

`// Java program to count number of ` `// divisors of n^2 which are not ` `// divisible by divisor of n ` `import` `java.util.*; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to count divisors of n^2 ` `// having no factors of 'n' ` `static` `int` `factors(` `int` `n) ` `{ ` ` ` `HashMap<Integer, ` ` ` `Integer>prime = ` `new` `HashMap<Integer, ` ` ` `Integer>(); ` ` ` `for` `(` `int` `i = ` `2` `; i <= Math.sqrt(n); ++i) ` ` ` `{ ` ` ` `while` `(n % i == ` `0` `) ` ` ` `{ ` ` ` ` ` `// Increment count of i-th prime divisor ` ` ` `if` `(prime.containsKey(i)) ` ` ` `{ ` ` ` `prime.put(i, prime.get(i) + ` `1` `); ` ` ` `} ` ` ` ` ` `else` ` ` `{ ` ` ` `prime.put(i, ` `1` `); ` ` ` `} ` ` ` ` ` `// Find next prime divisor ` ` ` `n = n / i; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Increment count if divisor still remains ` ` ` `if` `(n > ` `2` `) ` ` ` `{ ` ` ` `if` `(prime.containsKey(n)) ` ` ` `{ ` ` ` `prime.put(n, prime.get(n) + ` `1` `); ` ` ` `} ` ` ` `else` ` ` `{ ` ` ` `prime.put(n, ` `1` `); ` ` ` `} ` ` ` `} ` ` ` ` ` `// Initialize variable for counting the factors ` ` ` `// of n^2 and n as ans1 and ans2 respectively ` ` ` `int` `ans1 = ` `1` `, ans2 = ` `1` `; ` ` ` ` ` `// Range based for-loop ` ` ` `for` `(Map.Entry<Integer, ` ` ` `Integer> it : prime.entrySet()) ` ` ` `{ ` ` ` ` ` `// Use formula as discussed in above ` ` ` `ans1 *= ` `2` `* it.getValue() + ` `1` `; ` ` ` `ans2 *= it.getValue() + ` `1` `; ` ` ` `} ` ` ` ` ` `// return the difference of answers ` ` ` `return` `ans1 - ans2; ` `} ` ` ` `// Driver code ` `public` `static` `void` `main(String[] args) ` `{ ` ` ` `int` `n = ` `5` `; ` ` ` `System.out.println(factors(n)); ` ` ` `n = ` `8` `; ` ` ` `System.out.println(factors(n)); ` `} ` `} ` ` ` `// This code is contributed by PrinciRaj1992 ` |

*chevron_right*

*filter_none*

## Python3

`# Python3 program to count number of ` `# divisors of n^2 which are not ` `# divisible by divisor of n ` `import` `math as mt ` ` ` `# Function to count divisors of n^2 ` `# having no factors of 'n' ` `def` `factors(n): ` ` ` ` ` `prime ` `=` `dict` `() ` ` ` `for` `i ` `in` `range` `(` `2` `, mt.ceil(mt.sqrt(n ` `+` `1` `))): ` ` ` `while` `(n ` `%` `i ` `=` `=` `0` `): ` ` ` ` ` `# Increment count of i-th ` ` ` `# prime divisor ` ` ` `if` `i ` `in` `prime.keys(): ` ` ` `prime[i] ` `+` `=` `1` ` ` `else` `: ` ` ` `prime[i] ` `=` `1` ` ` ` ` `# Find next prime divisor ` ` ` `n ` `=` `n ` `/` `/` `i ` ` ` ` ` `# Increment count if divisor ` ` ` `# still remains ` ` ` `if` `(n > ` `2` `): ` ` ` `if` `n ` `in` `prime.keys(): ` ` ` `prime[n] ` `+` `=` `1` ` ` `else` `: ` ` ` `prime[n] ` `=` `1` ` ` ` ` `# Initialize variable for counting ` ` ` `# the factors of n^2 and n as ans1 ` ` ` `# and ans2 respectively ` ` ` `ans1 ` `=` `1` ` ` `ans2 ` `=` `1` ` ` ` ` `# Range based for-loop ` ` ` `for` `it ` `in` `prime: ` ` ` ` ` `# Use formula as discussed in above ` ` ` `ans1 ` `*` `=` `2` `*` `prime[it] ` `+` `1` ` ` `ans2 ` `*` `=` `prime[it] ` `+` `1` ` ` ` ` `# return the difference of answers ` ` ` `return` `ans1 ` `-` `ans2 ` ` ` `# Driver code ` `n ` `=` `5` `print` `(factors(n)) ` `n ` `=` `8` `print` `(factors(n)) ` ` ` `# This code is contributed by ` `# Mohit kumar 29 ` |

*chevron_right*

*filter_none*

## C#

`// C# program to count number of ` `// divisors of n^2 which are not ` `// divisible by divisor of n ` `using` `System; ` `using` `System.Collections.Generic; ` ` ` `class` `GFG ` `{ ` ` ` `// Function to count divisors of n^2 ` `// having no factors of 'n' ` `static` `int` `factors(` `int` `n) ` `{ ` ` ` `Dictionary<` `int` `, ` ` ` `int` `> prime = ` `new` `Dictionary<` `int` `, ` ` ` `int` `>(); ` ` ` `for` `(` `int` `i = 2; i <= Math.Sqrt(n); ++i) ` ` ` `{ ` ` ` `while` `(n % i == 0) ` ` ` `{ ` ` ` ` ` `// Increment count of i-th prime divisor ` ` ` `if` `(prime.ContainsKey(i)) ` ` ` `{ ` ` ` `prime[i] = prime[i] + 1; ` ` ` `} ` ` ` ` ` `else` ` ` `{ ` ` ` `prime.Add(i, 1); ` ` ` `} ` ` ` ` ` `// Find next prime divisor ` ` ` `n = n / i; ` ` ` `} ` ` ` `} ` ` ` ` ` `// Increment count if divisor still remains ` ` ` `if` `(n > 2) ` ` ` `{ ` ` ` `if` `(prime.ContainsKey(n)) ` ` ` `{ ` ` ` `prime[n] = prime[n] + 1; ` ` ` `} ` ` ` `else` ` ` `{ ` ` ` `prime.Add(n, 1); ` ` ` `} ` ` ` `} ` ` ` ` ` `// Initialize variable for counting the factors ` ` ` `// of n^2 and n as ans1 and ans2 respectively ` ` ` `int` `ans1 = 1, ans2 = 1; ` ` ` ` ` `// Range based for-loop ` ` ` `foreach` `(KeyValuePair<` `int` `, ` `int` `> it ` `in` `prime) ` ` ` `{ ` ` ` ` ` `// Use formula as discussed in above ` ` ` `ans1 *= 2 * it.Value + 1; ` ` ` `ans2 *= it.Value + 1; ` ` ` `} ` ` ` ` ` `// return the difference of answers ` ` ` `return` `ans1 - ans2; ` `} ` ` ` `// Driver code ` `public` `static` `void` `Main(String[] args) ` `{ ` ` ` `int` `n = 5; ` ` ` `Console.WriteLine(factors(n)); ` ` ` `n = 8; ` ` ` `Console.WriteLine(factors(n)); ` `} ` `} ` ` ` `// This code is contributed by Rajput-Ji ` |

*chevron_right*

*filter_none*

**Output:**

1 3

**Time complexity: **O(sqrt(n))

**Auxiliary space: **O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready.

## Recommended Posts:

- Find sum of divisors of all the divisors of a natural number
- Find sum of inverse of the divisors when sum of divisors and the number is given
- Maximum possible prime divisors that can exist in numbers having exactly N divisors
- Check if count of even divisors of N is equal to count of odd divisors
- Check if a number has an odd count of odd divisors and even count of even divisors
- Check if count of divisors is even or odd
- Find all divisors of a natural number | Set 1
- Find all divisors of a natural number | Set 2
- Querying maximum number of divisors that a number in a given range has
- Count Divisors of Factorial
- Sum of all proper divisors of a natural number
- Common Divisors of Two Numbers
- Find numbers with K odd divisors in a given range
- Count all perfect divisors of a number
- Count Divisors of n in O(n^1/3)
- Sum of divisors of factorial of a number
- Find numbers with n-divisors in a given range
- Count total divisors of A or B in a given range
- Divide the two given numbers by their common divisors
- Numbers with exactly 3 divisors

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.