📜  给定数字的除数总数

📅  最后修改于: 2021-05-06 21:49:00             🧑  作者: Mango

给定一个正整数n,我们必须找到n的除数总数。

例子:

Input : n = 25
Output : 3
Divisors are 1, 5 and 25.

Input : n = 24
Output : 8
Divisors are 1, 2, 3, 4, 6, 8
12 and 24.

我们已经讨论了打印所有除数的不同方法(此处和此处)。这里的任务比较简单,我们需要计算除数。

首先,将所有从2到max_size的质数存储在一个数组中,以便我们仅应检查质数除数。现在,我们只希望以以下形式计算n的因式分解:

n = \prod_{i=1}^{n} a_{i}^{p_{i}}
= a_{1}^{p_{1}}\times a_{2}^{p_{2}}\times a_3^{p_{3}}\times.....\times a_{n}^{p_{n}}
其中a i是素数因子,而p i是它们的整数幂。

因此,对于该分解,我们有公式可以找到n的除数的总数,即:
\prod_{i=1}^{n} (p_{i}+1)= (p_{0}+1)\times (p_{1}+1) \times......(p_{n}+1)

C++
// CPP program for finding number of divisor
#include 
  
using namespace std;
  
// program for finding no. of divisors
int divCount(int n)
{
    // sieve method for prime calculation
    bool hash[n + 1];
    memset(hash, true, sizeof(hash));
    for (int p = 2; p * p < n; p++)
        if (hash[p] == true)
            for (int i = p * 2; i < n; i += p)
                hash[i] = false;
  
    // Traversing through all prime numbers
    int total = 1;
    for (int p = 2; p <= n; p++) {
        if (hash[p]) {
  
            // calculate number of divisor
            // with formula total div = 
            // (p1+1) * (p2+1) *.....* (pn+1)
            // where n = (a1^p1)*(a2^p2).... 
            // *(an^pn) ai being prime divisor
            // for n and pi are their respective 
            // power in factorization
            int count = 0;
            if (n % p == 0) {
                while (n % p == 0) {
                    n = n / p;
                    count++;
                }
                total = total * (count + 1);
            }
        }
    }
    return total;
}
  
// driver program
int main()
{
    int n = 24;
    cout << divCount(n);
    return 0;
}


Java
// Java program for finding
// number of divisor
import java.io.*;
import java.util.*;
import java.lang.*;
  
class GFG
{
// program for finding 
// no. of divisors
static int divCount(int n)
{
    // sieve method for prime calculation
    boolean hash[] = new boolean[n + 1];
    Arrays.fill(hash, true);
    for (int p = 2; p * p < n; p++)
        if (hash[p] == true)
            for (int i = p * 2; i < n; i += p)
                hash[i] = false;
  
    // Traversing through 
    // all prime numbers
    int total = 1;
    for (int p = 2; p <= n; p++) 
    {
        if (hash[p])
        {
  
            // calculate number of divisor
            // with formula total div = 
            // (p1+1) * (p2+1) *.....* (pn+1)
            // where n = (a1^p1)*(a2^p2).... 
            // *(an^pn) ai being prime divisor
            // for n and pi are their respective 
            // power in factorization
            int count = 0;
            if (n % p == 0) 
            {
                while (n % p == 0) 
                {
                    n = n / p;
                    count++;
                }
                total = total * (count + 1);
            }
        }
    }
    return total;
}
  
// Driver Code
public static void main(String[] args)
{
    int n = 24;
    System.out.print(divCount(n));
}
}
  
// This code is contributed 
// by Akanksha Rai(Abby_akku)


Python3
# Python3 program for finding 
# number of divisor
  
# program for finding 
# no. of divisors
def divCount(n):
  
    # sieve method for
    # prime calculation
    hh = [1] * (n + 1);
      
    p = 2;
    while((p * p) < n):
        if (hh[p] == 1):
            for i in range((p * 2), n, p):
                hh[i] = 0;
        p += 1;
  
    # Traversing through 
    # all prime numbers
    total = 1;
    for p in range(2, n + 1):
        if (hh[p] == 1):
  
            # calculate number of divisor
            # with formula total div = 
            # (p1+1) * (p2+1) *.....* (pn+1)
            # where n = (a1^p1)*(a2^p2).... 
            # *(an^pn) ai being prime divisor
            # for n and pi are their respective 
            # power in factorization
            count = 0;
            if (n % p == 0):
                while (n % p == 0):
                    n = int(n / p);
                    count += 1;
                total *= (count + 1);
                  
    return total;
  
# Driver Code
n = 24;
print(divCount(n));
  
# This code is contributed by mits


C#
// C# program for finding
// number of divisor
using System;
  
class GFG
{
// program for finding 
// no. of divisors
static int divCount(int n)
{
    // sieve method for prime calculation
    bool[] hash = new bool[n + 1];
    for (int p = 2; p * p < n; p++)
        if (hash[p] == false)
            for (int i = p * 2;
                     i < n; i += p)
                hash[i] = true;
  
    // Traversing through 
    // all prime numbers
    int total = 1;
    for (int p = 2; p <= n; p++) 
    {
        if (hash[p] == false)
        {
  
            // calculate number of divisor
            // with formula total div = 
            // (p1+1) * (p2+1) *.....* (pn+1)
            // where n = (a1^p1)*(a2^p2).... 
            // *(an^pn) ai being prime divisor
            // for n and pi are their respective 
            // power in factorization
            int count = 0;
            if (n % p == 0) 
            {
                while (n % p == 0) 
                {
                    n = n / p;
                    count++;
                }
                total = total * (count + 1);
            }
        }
    }
    return total;
}
  
// Driver Code
public static void Main()
{
    int n = 24;
    Console.WriteLine(divCount(n));
}
}
  
// This code is contributed 
// by mits


PHP


输出:
8

参考:除数。