Given an integer N, the task is to count the number of square-free divisors of the given number.
A number is said to be square-free, if no prime factor divides it more than once, i.e., the largest power of a prime factor that divides N is one.
Examples:
Input: N = 72
Output: 3
Explanation: 2, 3, 6 are the three possible square free numbers that divide 72.Input: N = 62290800
Output: 31
Naive Approach:
For every integer N, find its factors and check if it is a square-free number or not. If it is a square-free number then increase the count or proceed to the next number otherwise. Finally, print the count which gives us the required number of square-free divisors of N.
Time complexity: O(N3/2)
Efficient Approach:
Follow the steps below to solve the problem:
- From the definition of square-free numbers, it can be understood that by finding out all the prime factors of the given number N, all the possible square-free numbers that can divide N can be found out.
- Let the number of prime factors of N be X. Therefore, 2X – 1 square-free numbers can be formed using these X prime factors.
- Since each of these X prime factors is a factor of N, therefore any product combination of these X prime factors is also a factor of N and thus there will be 2X – 1 square free divisors of N.
Illustration:
- N = 72
- Prime factors of N are 2, 3.
- Hence, the three possible square free numbers generated from these two primes are 2, 3 and 6.
- Hence, the total square-free divisors of 72 are 3( = 22 – 1).
Below is the implementation of the above approach:
C++
// C++ Program to find the square// free divisors of a given number#include <bits/stdc++.h>using namespace std;// The function to check// if a number is prime or notbool IsPrime(int i){ // If the number is even // then its not prime if (i % 2 == 0 && i != 2) return false; else { for (int j = 3; j <= sqrt(i); j += 2) { if (i % j == 0) return false; } return true; }}// Driver Codeint main(){ // Stores the count of // distinct prime factors int c = 0; int N = 72; for (int i = 2; i <= sqrt(N); i++) { if (IsPrime(i)) { if (N % i == 0) { c++; if (IsPrime(N / i) && i != (N / i)) { c++; } } } } // Print the number of // square-free divisors cout << pow(2, c) - 1 << endl; return 0;} |
Java
// Java program to find the square // free divisors of a given numberimport java.util.*;class GFG{ // The function to check // if a number is prime or not static boolean IsPrime(int i){ // If the number is even // then its not prime if (i % 2 == 0 && i != 2) return false; else { for(int j = 3; j <= Math.sqrt(i); j += 2) { if (i % j == 0) return false; } return true; }}// Driver code public static void main(String[] args) { // Stores the count of // distinct prime factors int c = 0; int N = 72; for(int i = 2; i <= Math.sqrt(N); i++) { if (IsPrime(i)) { if (N % i == 0) { c++; if (IsPrime(N / i) && i != (N / i)) c++; } } } // Print the number of // square-free divisors System.out.print(Math.pow(2, c) - 1);}}// This code is contributed by sanjoy_62 |
Python3
# Python3 program to find the square # free divisors of a given number import math# The function to check # if a number is prime or notdef IsPrime(i): # If the number is even # then its not prime if (i % 2 == 0 and i != 2): return 0; else: for j in range(3, int(math.sqrt(i) + 1), 2): if (i % j == 0): return 0; return 1; # Driver code # Stores the count of # distinct prime factorsc = 0; N = 72;for i in range(2, int(math.sqrt(N)) + 1): if (IsPrime(i)): if (N % i == 0): c = c + 1 if (IsPrime(N / i) and i != (N / i)): c = c + 1 # Print the number of # square-free divisors print (pow(2, c) - 1)# This code is contributed by sanjoy_62 |
C#
// C# program to find the square // free divisors of a given numberusing System;class GFG{ // The function to check // if a number is prime or not static Boolean IsPrime(int i){ // If the number is even // then its not prime if (i % 2 == 0 && i != 2) return false; else { for(int j = 3; j <= Math.Sqrt(i); j += 2) { if (i % j == 0) return false; } return true; }}// Driver code public static void Main(String[] args) { // Stores the count of // distinct prime factors int c = 0; int N = 72; for(int i = 2; i <= Math.Sqrt(N); i++) { if (IsPrime(i)) { if (N % i == 0) { c++; if (IsPrime(N / i) && i != (N / i)) c++; } } } // Print the number of // square-free divisors Console.Write(Math.Pow(2, c) - 1);}}// This code is contributed by shivanisinghss2110 |
Javascript
<script>// Javascript program to find the square // free divisors of a given number// The function to check// if a number is prime or notfunction IsPrime(i){ // If the number is even // then its not prime if (i % 2 == 0 && i != 2) return false; else { for(j = 3; j <= Math.sqrt(i); j += 2) { if (i % j == 0) return false; } return true; }}// Driver code// Stores the count of// distinct prime factorsvar c = 0;var N = 72;for(i = 2; i <= Math.sqrt(N); i++){ if (IsPrime(i)) { if (N % i == 0) { c++; if (IsPrime(N / i) && i != (N / i)) c++; } }}// Print the number of// square-free divisorsdocument.write(Math.pow(2, c) - 1);// This code is contributed by aashish1995</script> |
3
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
