给定两个整数N和K ,任务是计算所有正数除以K的
例子:
Input: n = 10, k = 5
Output: 3
2, 3 and 7 are the only numbers < 10 which have 2 divisors (equal to the number of divisors of 5)
Input: n = 500, k = 6
Output: 148
方法:
- 计算每个数
的除数的数并将结果存储在其中ARR [I]包含我的除数的数目的阵列。 - 遍历arr [] ,如果arr [i] = arr [K]则更新count = count +1 。
- 最后打印计数值。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the count of the
// divisors of a number
int countDivisors(int n)
{
// Count the number of
// 2s that divide n
int x = 0, ans = 1;
while (n % 2 == 0) {
x++;
n = n / 2;
}
ans = ans * (x + 1);
// n must be odd at this point.
// So we can skip one element
for (int i = 3; i <= sqrt(n); i = i + 2) {
// While i divides n
x = 0;
while (n % i == 0) {
x++;
n = n / i;
}
ans = ans * (x + 1);
}
// This condition is to
// handle the case when
// n is a prime number > 2
if (n > 2)
ans = ans * 2;
return ans;
}
int getTotalCount(int n, int k)
{
int k_count = countDivisors(k);
// Count the total elements
// that have divisors exactly equal
// to as that of k's
int count = 0;
for (int i = 1; i < n; i++)
if (k_count == countDivisors(i))
count++;
// Exclude k from the result if it
// is smaller than n.
if (k < n)
count = count - 1;
return count;
}
// Driver code
int main()
{
int n = 500, k = 6;
cout << getTotalCount(n, k);
return 0;
}
Java
// Java implementation of the approach
public class GFG{
// Function to return the count of the
// divisors of a number
static int countDivisors(int n)
{
// Count the number of
// 2s that divide n
int x = 0, ans = 1;
while (n % 2 == 0) {
x++;
n = n / 2;
}
ans = ans * (x + 1);
// n must be odd at this point.
// So we can skip one element
for (int i = 3; i <= Math.sqrt(n); i = i + 2) {
// While i divides n
x = 0;
while (n % i == 0) {
x++;
n = n / i;
}
ans = ans * (x + 1);
}
// This condition is to
// handle the case when
// n is a prime number > 2
if (n > 2)
ans = ans * 2;
return ans;
}
static int getTotalCount(int n, int k)
{
int k_count = countDivisors(k);
// Count the total elements
// that have divisors exactly equal
// to as that of k's
int count = 0;
for (int i = 1; i < n; i++)
if (k_count == countDivisors(i))
count++;
// Exclude k from the result if it
// is smaller than n.
if (k < n)
count = count - 1;
return count;
}
// Driver code
public static void main(String []args)
{
int n = 500, k = 6;
System.out.println(getTotalCount(n, k));
}
// This code is contributed by Ryuga
}
Python3
# Python3 implementation of the approach
# Function to return the count of
# the divisors of a number
def countDivisors(n):
# Count the number of 2s that divide n
x, ans = 0, 1
while (n % 2 == 0):
x += 1
n = n / 2
ans = ans * (x + 1)
# n must be odd at this point.
# So we can skip one element
for i in range(3, int(n ** 1 / 2) + 1, 2):
# While i divides n
x = 0
while (n % i == 0):
x += 1
n = n / i
ans = ans * (x + 1)
# This condition is to handle the
# case when n is a prime number > 2
if (n > 2):
ans = ans * 2
return ans
def getTotalCount(n, k):
k_count = countDivisors(k)
# Count the total elements that
# have divisors exactly equal
# to as that of k's
count = 0
for i in range(1, n):
if (k_count == countDivisors(i)):
count += 1
# Exclude k from the result if it
# is smaller than n.
if (k < n):
count = count - 1
return count
# Driver code
if __name__ == '__main__':
n, k = 500, 6
print(getTotalCount(n, k))
# This code is contributed
# by 29AjayKumar
C#
// C# implementation of the approach
using System;
public class GFG{
// Function to return the count of the
// divisors of a number
static int countDivisors(int n)
{
// Count the number of
// 2s that divide n
int x = 0, ans = 1;
while (n % 2 == 0) {
x++;
n = n / 2;
}
ans = ans * (x + 1);
// n must be odd at this point.
// So we can skip one element
for (int i = 3; i <= Math.Sqrt(n); i = i + 2) {
// While i divides n
x = 0;
while (n % i == 0) {
x++;
n = n / i;
}
ans = ans * (x + 1);
}
// This condition is to
// handle the case when
// n is a prime number > 2
if (n > 2)
ans = ans * 2;
return ans;
}
static int getTotalCount(int n, int k)
{
int k_count = countDivisors(k);
// Count the total elements
// that have divisors exactly equal
// to as that of k's
int count = 0;
for (int i = 1; i < n; i++)
if (k_count == countDivisors(i))
count++;
// Exclude k from the result if it
// is smaller than n.
if (k < n)
count = count - 1;
return count;
}
// Driver code
public static void Main()
{
int n = 500, k = 6;
Console.WriteLine(getTotalCount(n, k));
}
}
// This code is contributed by 29AjayKumar
PHP
2
if ($n > 2)
$ans = $ans * 2;
return $ans;
}
function getTotalCount($n, $k)
{
$k_count = countDivisors($k);
// Count the total elements
// that have divisors exactly equal
// to as that of k's
$count = 0;
for ($i = 1; $i < $n; $i++)
if ($k_count == countDivisors($i))
$count++;
// Exclude k from the result if it
// is smaller than n.
if ($k < $n)
$count = $count - 1;
return $count;
}
// Driver code
$n = 500;
$k = 6;
echo getTotalCount($n, $k);
#This code is contributed by Sachin..
?>
输出:
148
优化:
上面的解决方案可以使用Sieve技术进行优化。有关详细信息,请参考小于或等于N的正整数为9的整数的Count个整数。