给定一个正整数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 =
=
其中a i是素数因子,而p i是它们的整数幂。
因此,对于该分解,我们有公式可以找到n的除数的总数,即:
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
参考:除数。