Find numbers with K odd divisors in a given range
Last Updated :
23 Jun, 2022
Given two numbers a and b, and a number k which is odd. The task is to find all the numbers between a and b (both inclusive) having exactly k divisors.
Examples:
Input : a = 2, b = 49, k = 3
Output: 4
// Between 2 and 49 there are four numbers
// with three divisors
// 4 (Divisors 1, 2, 4), 9 (Divisors 1, 3, 9),
// 25 (Divisors 1, 5, 25} and 49 (1, 7 and 49)
Input : a = 1, b = 100, k = 9
Output: 2
// between 1 and 100 there are 36 (1, 2, 3, 4, 6, 9, 12, 18, 36)
// and 100 (1, 2, 4, 5, 10, 20, 25, 50, 100) having exactly 9
// divisors
This problem has simple solution, here we are given that k is odd and we know that only perfect square numbers have odd number of divisors , so we just need to check all perfect square numbers between a and b, and calculate divisors of only those perfect square numbers.
C++
// C++ program to count numbers with k odd
// divisors in a range.
#include<bits/stdc++.h>
using namespace std;
// Utility function to check if number is
// perfect square or not
bool isPerfect(int n)
{
int s = sqrt(n);
return (s*s == n);
}
// Utility Function to return count of divisors
// of a number
int divisorsCount(int n)
{
// Note that this loop runs till square root
int count=0;
for (int i=1; i<=sqrt(n)+1; i++)
{
if (n%i==0)
{
// If divisors are equal, count it
// only once
if (n/i == i)
count += 1;
// Otherwise print both
else
count += 2;
}
}
return count;
}
// Function to calculate all divisors having
// exactly k divisors between a and b
int kDivisors(int a,int b,int k)
{
int count = 0; // Initialize result
// calculate only for perfect square numbers
for (int i=a; i<=b; i++)
{
// check if number is perfect square or not
if (isPerfect(i))
// total divisors of number equals to
// k or not
if (divisors(i) == k)
count++;
}
return count;
}
// Driver program to run the case
int main()
{
int a = 2, b = 49, k = 3;
cout << kDivisors(a, b, k);
return 0;
}
Java
// Java program to count numbers
// with k odd divisors in a range.
import java.io.*;
import java.math.*;
class GFG {
// Utility function to check if
// number is perfect square or not
static boolean isPerfect(int n)
{
int s = (int)(Math.sqrt(n));
return (s*s == n);
}
// Utility Function to return
// count of divisors of a number
static int divisorsCount(int n)
{
// Note that this loop
// runs till square root
int count=0;
for (int i = 1; i <= Math.sqrt(n) + 1; i++)
{
if (n % i == 0)
{
// If divisors are equal,
// count it only once
if (n / i == i)
count += 1;
// Otherwise print both
else
count += 2;
}
}
return count;
}
// Function to calculate all
// divisors having exactly k
// divisors between a and b
static int kDivisors(int a,int b,int k)
{
// Initialize result
int count = 0;
// calculate only for
// perfect square numbers
for (int i = a; i <= b; i++)
{
// check if number is
// perfect square or not
if (isPerfect(i))
// total divisors of number
// equals to k or not
if (divisorsCount(i) == k)
count++;
}
return count;
}
// Driver program to run the case
public static void main(String args[])
{
int a = 21, b = 149, k = 333;
System.out.println(kDivisors(a, b, k));
}
}
// This code is contributed by Nikita Tiwari.
Python3
# Python3 program to count numbers
# with k odd divisors in a range.
import math
# Utility function to check if number
# is perfect square or not
def isPerfect(n) :
s = math.sqrt(n)
return (s * s == n)
# Utility Function to return
# count of divisors of a number
def divisorsCount(n) :
# Note that this loop runs till
# square root
count = 0
for i in range(1, (int)(math.sqrt(n) + 2)) :
if (n % i == 0) :
# If divisors are equal,
# count it only once
if (n // i == i) :
count = count + 1
# Otherwise print both
else :
count = count + 2
return count
# Function to calculate all divisors having
# exactly k divisors between a and b
def kDivisors(a, b, k) :
count = 0 # Initialize result
# calculate only for perfect square numbers
for i in range(a, b + 1) :
# check if number is perfect square or not
if (isPerfect(i)) :
# total divisors of number equals to
# k or not
if (divisorsCount(i) == k) :
count = count + 1
return count
# Driver program to run the case
a = 2
b = 49
k = 3
print(kDivisors(a, b, k))
# This code is contributed by Nikita Tiwari.
C#
// C# program to count numbers with
// k odd divisors in a range.
using System;
class GFG {
// Utility function to check if number
// is perfect square or not
static bool isPerfect(int n)
{
int s = (int)(Math.Sqrt(n));
return (s * s == n);
}
// Utility Function to return
// count of divisors of a number
static int divisorsCount(int n)
{
// Note that this loop
// runs till square root
int count=0;
for (int i = 1; i <= Math.Sqrt(n) + 1; i++)
{
if (n % i == 0)
{
// If divisors are equal,
// count it only once
if (n / i == i)
count += 1;
// Otherwise print both
else
count += 2;
}
}
return count;
}
// Function to calculate all
// divisors having exactly k
// divisors between a and b
static int kDivisors(int a, int b,
int k)
{
// Initialize result
int count = 0;
// calculate only for
// perfect square numbers
for (int i = a; i <= b; i++)
{
// check if number is
// perfect square or not
if (isPerfect(i))
// total divisors of number
// equals to k or not
if (divisorsCount(i) == k)
count++;
}
return count;
}
// Driver Code
public static void Main(String []args)
{
int a = 21, b = 149, k = 333;
Console.Write(kDivisors(a, b, k));
}
}
// This code is contributed by Nitin Mittal.
PHP
<?php
// PHP program to count numbers
// with k odd divisors in a range.
// function to check if number is
// perfect square or not
function isPerfect($n)
{
$s = sqrt($n);
return ($s * $s == $n);
}
// Function to return count
// of divisors of a number
function divisorsCount($n)
{
// Note that this loop
// runs till square root
$count = 0;
for ($i = 1; $i <= sqrt($n) + 1; $i++)
{
if ($n % $i == 0)
{
// If divisors are equal,
// count it only once
if ($n / $i == $i)
$count += 1;
// Otherwise print both
else
$count += 2;
}
}
return $count;
}
// Function to calculate
// all divisors having
// exactly k divisors
// between a and b
function kDivisors($a, $b, $k)
{
// Initialize result
$count = 0;
// calculate only for
// perfect square numbers
for ($i = $a; $i <= $b; $i++)
{
// check if number is
// perfect square or not
if (isPerfect($i))
// total divisors of
// number equals to
// k or not
if (divisorsCount($i) == $k)
$count++;
}
return $count;
}
// Driver Code
$a = 2;
$b = 49;
$k = 3;
echo kDivisors($a, $b, $k);
// This code is contributed by nitin mittal.
?>
JavaScript
<script>
// JavaScript program to count numbers with
// k odd divisors in a range.
// Utility function to check if number
// is perfect square or not
function isPerfect(n)
{
var s = parseInt((Math.sqrt(n)));
return (s * s == n);
}
// Utility Function to return
// count of divisors of a number
function divisorsCount(n)
{
// Note that this loop
// runs till square root
var count=0;
for (var i = 1; i <= parseInt(Math.sqrt(n)) + 1; i++)
{
if (n % i == 0)
{
// If divisors are equal,
// count it only once
if (parseInt(n / i) == i)
count += 1;
// Otherwise print both
else
count += 2;
}
}
return count;
}
// Function to calculate all
// divisors having exactly k
// divisors between a and b
function kDivisors(a, b, k)
{
// Initialize result
var count = 0;
// calculate only for
// perfect square numbers
for(var i = a; i <= b; i++)
{
// check if number is
// perfect square or not
if (isPerfect(i))
{
// total divisors of number
// equals to k or not
if (divisorsCount(i)==k)
{
count++;
}
}
}
return count;
}
// Driver Code
var a = 2, b = 49, k = 3;
document.write(kDivisors(a, b, k));
</script>
Output:
4
Time Complexity: O(nsqrtn) , where n is the range of a and b
Auxiliary Space: O(1)
This problem can be solved more efficiently. Please refer method 2 of below post for an efficient solution.
Number of perfect squares between two given numbers
Similar Reads
Find numbers with n-divisors in a given range Given three integers a, b, n .Your task is to print number of numbers between a and b including them also which have n-divisors. A number is called n-divisor if it has total n divisors including 1 and itself. Examples: Input : a = 1, b = 7, n = 2 Output : 4 There are four numbers with 2 divisors in
14 min read
Count integers from a given range with no odd divisors Given an array arr[] consisting of N integers, the task is to count the number of integers in the range [1, arr[i]] that does not contain any odd divisors. Examples: Input: arr[] = {15, 16, 20, 35}Output: 3 4 4 5Explanation: Numbers with no odd divisors from 1 to arr[0] ( = 15), are 2, 4, 8. Therefo
6 min read
Find the number of divisors of all numbers in the range [1, n] Given an integer N. The task is to find the number of divisors of all the numbers in the range [1, N]. Examples: Input: N = 5 Output: 1 2 2 3 2 divisors(1) = 1 divisors(2) = 1 and 2 divisors(3) = 1 and 3 divisors(4) = 1, 2 and 4 divisors(5) = 1 and 5 Input: N = 10 Output: 1 2 2 3 2 4 2 4 3 4 Approac
5 min read
Number of elements with odd factors in given range Given a range [n,m], find the number of elements that have odd number of factors in the given range (n and m inclusive). Examples : Input : n = 5, m = 100 Output : 8 The numbers with odd factors are 9, 16, 25, 36, 49, 64, 81 and 100 Input : n = 8, m = 65 Output : 6 Input : n = 10, m = 23500 Output :
4 min read
Program to find count of numbers having odd number of divisors in given range Given two integers A and B. The task is to count how many numbers in the interval [ A, B ] have an odd number of divisors. Examples: Input : A = 1, B = 10Output : 3 Input : A = 5, B = 15Output : 1 Naive Approach :The simple approach would be to iterate through all the numbers between range [A, B] an
12 min read
Sum of greatest odd divisor of numbers in given range Given an interval of integers [A, B]. For each number in this interval compute its greatest odd divisor. Output the sum of these divisors. Examples: Input : A = 1, B = 3 Output : 5 1 + 1 + 3 = 5 Input : A = 3, B = 9 Output : 29 3 + 1 + 5 + 3 + 7 + 1 + 9 = 29 Naive Approach :A simple approach is to i
7 min read