📜  计算除数等于K的<N个数

📅  最后修改于: 2021-04-21 21:18:57             🧑  作者: Mango

给定两个整数NK ,任务是计算所有正数除以K的个数。

例子:

方法:

  • 计算每个数的除数的数并将结果存储在其中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个整数。