Как найти количество общих делителей числа

Given two integer numbers, the task is to find count of all common divisors of given numbers?

Examples : 

Input : a = 12, b = 24
Output: 6
// all common divisors are 1, 2, 3, 
// 4, 6 and 12

Input : a = 3, b = 17
Output: 1
// all common divisors are 1

Input : a = 20, b = 36
Output: 3
// all common divisors are 1, 2, 4

It is recommended to refer all divisors of a given number as a prerequisite of this article. 

Naive Solution 
A simple solution is to first find all divisors of first number and store them in an array or hash. Then find common divisors of second number and store them. Finally print common elements of two stored arrays or hash. The key is that the magnitude of powers of prime factors of a divisor should be equal to the minimum power of two prime factors of a and b.

  • Find the prime factors of a using prime factorization.
  • Find the count of each prime factor of a and store it in a Hashmap.
  • Prime factorize b using distinct prime factors of a.
  • Then the total number of divisors would be equal to the product of (count + 1) 
    of each factor.
  • count is the minimum of counts of each prime factors of a and b.
  • This gives the count of all divisors of a and b.

C++

#include <bits/stdc++.h>

using namespace std;

map<int, int> ma;

void primeFactorize(int a)

{

    for(int i = 2; i * i <= a; i += 2)

    {

        int cnt = 0;

        while (a % i == 0)

        {

            cnt++;

            a /= i;

        }

        ma[i] = cnt;

    }

    if (a > 1)

    {

        ma[a] = 1;

    }

}

int commDiv(int a, int b)

{

    primeFactorize(a);

    int res = 1;

    for(auto m = ma.begin();

             m != ma.end(); m++)

    {

        int cnt = 0;

        int key = m->first;

        int value = m->second;

        while (b % key == 0)

        {

            b /= key;

            cnt++;

        }

        res *= (min(cnt, value) + 1);

    }

    return res;

}

int main()

{

    int a = 12, b = 24;

    cout << commDiv(a, b) << endl;

    return 0;

}

Java

import java.util.*;

import java.io.*;

class GFG {

    static HashMap<Integer, Integer> ma = new HashMap<>();

    static void primeFactorize(int a)

    {

        for (int i = 2; i * i <= a; i += 2) {

            int cnt = 0;

            while (a % i == 0) {

                cnt++;

                a /= i;

            }

            ma.put(i, cnt);

        }

        if (a > 1)

            ma.put(a, 1);

    }

    static int commDiv(int a, int b)

    {

        primeFactorize(a);

        int res = 1;

        for (Map.Entry<Integer, Integer> m : ma.entrySet()) {

            int cnt = 0;

            int key = m.getKey();

            int value = m.getValue();

            while (b % key == 0) {

                b /= key;

                cnt++;

            }

            res *= (Math.min(cnt, value) + 1);

        }

        return res;

    }

    public static void main(String args[])

    {

        int a = 12, b = 24;

        System.out.println(commDiv(a, b));

    }

}

Python3

import math

ma = {}

def primeFactorize(a):

    sqt = int(math.sqrt(a))

    for i in range(2, sqt, 2):

        cnt = 0

        while (a % i == 0):

            cnt += 1

            a /= i

        ma[i] = cnt

    if (a > 1):

        ma[a] = 1

def commDiv(a, b):

    primeFactorize(a)

    res = 1

    for key, value in ma.items():

        cnt = 0

        while (b % key == 0):

            b /= key

            cnt += 1

        res *= (min(cnt, value) + 1)

    return res

a = 12

b = 24

print(commDiv(a, b))

C#

using System;

using System.Collections.Generic;

class GFG{

static Dictionary<int,

                  int> ma = new Dictionary<int,

                                           int>();

static void primeFactorize(int a)

{

    for(int i = 2; i * i <= a; i += 2)

    {

        int cnt = 0;

        while (a % i == 0)

        {

            cnt++;

            a /= i;

        }

        ma.Add(i, cnt);

    }

    if (a > 1)

        ma.Add(a, 1);

}

static int commDiv(int a, int b)

{

    primeFactorize(a);

    int res = 1;

    foreach(KeyValuePair<int, int> m in ma)

    {

        int cnt = 0;

        int key = m.Key;

        int value = m.Value;

        while (b % key == 0)

        {

            b /= key;

            cnt++;

        }

        res *= (Math.Min(cnt, value) + 1);

    }

    return res;

}

static void Main()

{

    int a = 12, b = 24;

    Console.WriteLine(commDiv(a, b));

}

}

Javascript

<script>   

      let ma = new Map();

    function primeFactorize(a)

    {

        for(let i = 2; i * i <= a; i += 2)

        {

            let cnt = 0;

            while (a % i == 0)

            {

                cnt++;

                a = parseInt(a / i, 10);

            }

            ma.set(i, cnt);

        }

        if (a > 1)

        {

            ma.set(a, 1);

        }

    }

    function commDiv(a,b)

    {

        primeFactorize(a);

        let res = 1;

        ma.forEach((values,keys)=>{

            let cnt = 0;

            let key = keys;

            let value = values;

            while (b % key == 0)

            {

                b = parseInt(b / key, 10);

                cnt++;

            }

            res *= (Math.min(cnt, value) + 1);

        })

        return res;

    }

    let a = 12, b = 24;

    document.write(commDiv(a, b));

</script>

Output: 

6

Time Complexity: O(√n log n) 
Auxiliary Space: O(n)

Efficient Solution – 
A better solution is to calculate the greatest common divisor (gcd) of given two numbers, and then count divisors of that gcd. 

C++

#include <bits/stdc++.h>

using namespace std;

int gcd(int a, int b)

{

    if (a == 0)

        return b;

    return gcd(b % a, a);

}

int commDiv(int a, int b)

{

    int n = gcd(a, b);

    int result = 0;

    for (int i = 1; i <= sqrt(n); i++) {

        if (n % i == 0) {

            if (n / i == i)

                result += 1;

            else

                result += 2;

        }

    }

    return result;

}

int main()

{

    int a = 12, b = 24;

    cout << commDiv(a, b);

    return 0;

}

Java

class Test {

    static int gcd(int a, int b)

    {

        if (a == 0)

            return b;

        return gcd(b % a, a);

    }

    static int commDiv(int a, int b)

    {

        int n = gcd(a, b);

        int result = 0;

        for (int i = 1; i <= Math.sqrt(n); i++) {

            if (n % i == 0) {

                if (n / i == i)

                    result += 1;

                else

                    result += 2;

            }

        }

        return result;

    }

    public static void main(String args[])

    {

        int a = 12, b = 24;

        System.out.println(commDiv(a, b));

    }

}

Python3

from math import sqrt

def gcd(a, b):

    if a == 0:

        return b

    return gcd(b % a, a)

def commDiv(a, b):

    n = gcd(a, b)

    result = 0

    for i in range(1,int(sqrt(n))+1):

        if n % i == 0:

            if n/i == i:

                result += 1

            else:

                result += 2

    return result

if __name__ == "__main__":

    a = 12

    b = 24;

    print(commDiv(a, b))

C#

using System;

class GFG {

    static int gcd(int a, int b)

    {

        if (a == 0)

            return b;

        return gcd(b % a, a);

    }

    static int commDiv(int a, int b)

    {

        int n = gcd(a, b);

        int result = 0;

        for (int i = 1; i <= Math.Sqrt(n); i++) {

            if (n % i == 0) {

                if (n / i == i)

                    result += 1;

                else

                    result += 2;

            }

        }

        return result;

    }

    public static void Main(String[] args)

    {

        int a = 12, b = 24;

        Console.Write(commDiv(a, b));

    }

}

PHP

<?php

function gcd($a, $b)

{

    if ($a == 0)

        return $b;

    return gcd($b % $a, $a);

}

function commDiv($a, $b)

{

    $n = gcd($a, $b);

    $result = 0;

    for ($i = 1; $i <= sqrt($n);

                 $i++)

    {

        if ($n % $i == 0)

        {

            if ($n / $i == $i)

                $result += 1;

            else

                $result += 2;

        }

    }

    return $result;

}

$a = 12; $b = 24;

echo(commDiv($a, $b));

?>

Javascript

<script>

    function gcd(a, b)

    {

        if (a == 0)

            return b;

        return gcd(b % a, a);

    }

    function commDiv(a, b)

    {

        let n = gcd(a, b);

        let result = 0;

        for (let i = 1; i <= Math.sqrt(n); i++) {

            if (n % i == 0) {

                if (n / i == i)

                    result += 1;

                else

                    result += 2;

            }

        }

        return result;

    }

    let a = 12, b = 24;

    document.write(commDiv(a, b));

</script>

Output :  

6

Time complexity: O(n1/2) where n is the gcd of two numbers.
Auxiliary Space: O(1)

This article is contributed by Aarti_Rathi and Shashank Mishra ( Gullu ). If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Another Approach:

1. Define a function “gcd” that takes two integers “a” and “b” and returns their greatest common divisor (GCD) using the Euclidean algorithm.
2. Define a function “count_common_divisors” that takes two integers “a” and “b” and counts the number of common divisors of “a” and “b” using their GCD.
3. Calculate the GCD of “a” and “b” using the “gcd” function.
4. Initialize a counter “count” to 0.
5. Loop through all possible divisors of the GCD of “a” and “b” from 1 to the square root of the GCD.
6. If the current divisor divides the GCD evenly, increment the counter by 2 (because both “a” and “b” are divisible by the divisor).
7. If the square of the current divisor equals the GCD, decrement the counter by 1 (because we’ve already counted this divisor once).
8. Return the final count of common divisors.
9. In the main function, define two integers “a” and “b” and call the “count_common_divisors” function with these integers.
10. Print the number of common divisors of “a” and “b” using the printf function.

C

#include <stdio.h>

int gcd(int a, int b) {

    if(b == 0) {

        return a;

    }

    return gcd(b, a % b);

}

int count_common_divisors(int a, int b) {

    int gcd_ab = gcd(a, b);

    int count = 0;

    for(int i = 1; i * i <= gcd_ab; i++) {

        if(gcd_ab % i == 0) {

            count += 2;

            if(i * i == gcd_ab) {

                count--;

            }

        }

    }

    return count;

}

int main() {

    int a = 12;

    int b = 18;

    int common_divisors = count_common_divisors(a, b);

    printf("The number of common divisors of %d and %d is %d.n", a, b, common_divisors);

    return 0;

}

C++

#include <bits/stdc++.h>

using namespace std;

int gcd(int a, int b) {

    if(b == 0) {

        return a;

    }

    return gcd(b, a % b);

}

int count_common_divisors(int a, int b) {

    int gcd_ab = gcd(a, b);

    int count = 0;

    for(int i = 1; i * i <= gcd_ab; i++) {

        if(gcd_ab % i == 0) {

            count += 2;

            if(i * i == gcd_ab) {

                count--;

            }

        }

    }

    return count;

}

int main() {

    int a = 12;

    int b = 18;

    int common_divisors = count_common_divisors(a, b);

    cout<<"The number of common divisors of "<<a<<" and "<<b<<" is "<<common_divisors<<"."<<endl;

    return 0;

}

Java

import java.util.*;

public class Main {

  public static int gcd(int a, int b) {

    if(b == 0) {

      return a;

    }

    return gcd(b, a % b);

  }

  public static int countCommonDivisors(int a, int b) {

    int gcd_ab = gcd(a, b);

    int count = 0;

    for(int i = 1; i * i <= gcd_ab; i++) {

      if(gcd_ab % i == 0) {

        count += 2;

        if(i * i == gcd_ab) {

          count--;

        }

      }

    }

    return count;

  }

  public static void main(String[] args) {

    int a = 12;

    int b = 18;

    int commonDivisors = countCommonDivisors(a, b);

    System.out.println("The number of common divisors of " + a + " and " + b + " is " + commonDivisors + ".");

  }

}

Python3

import math

def gcd(a, b):

    if b == 0:

        return a

    return gcd(b, a % b)

def count_common_divisors(a, b):

    gcd_ab = gcd(a, b)

    count = 0

    for i in range(1, int(math.sqrt(gcd_ab)) + 1):

        if gcd_ab % i == 0:

            count += 2

            if i * i == gcd_ab:

                count -= 1

    return count

a = 12

b = 18

common_divisors = count_common_divisors(a, b)

print("The number of common divisors of", a, "and", b, "is", common_divisors, ".")

C#

using System;

public class MainClass

{

    public static int GCD(int a, int b)

    {

        if (b == 0)

        {

            return a;

        }

        return GCD(b, a % b);

    }

    public static int CountCommonDivisors(int a, int b)

    {

        int gcd_ab = GCD(a, b);

        int count = 0;

        for (int i = 1; i * i <= gcd_ab; i++)

        {

            if (gcd_ab % i == 0)

            {

                count += 2;

                if (i * i == gcd_ab)

                {

                    count--;

                }

            }

        }

        return count;

    }

    public static void Main()

    {

        int a = 12;

        int b = 18;

        int commonDivisors = CountCommonDivisors(a, b);

        Console.WriteLine("The number of common divisors of {0} and {1} is {2}.", a, b, commonDivisors);

    }

}

Javascript

function gcd(a, b) {

    if(b === 0) {

        return a;

    }

    return gcd(b, a % b);

}

function count_common_divisors(a, b) {

    let gcd_ab = gcd(a, b);

    let count = 0;

    for(let i = 1; i * i <= gcd_ab; i++) {

        if(gcd_ab % i === 0) {

            count += 2;

            if(i * i === gcd_ab) {

                count--;

            }

        }

    }

    return count;

}

let a = 12;

let b = 18;

let common_divisors = count_common_divisors(a, b);

console.log(`The number of common divisors of ${a} and ${b} is ${common_divisors}.`);

Output

The number of common divisors of 12 and 18 is 4.

The time complexity of the gcd() function is O(log(min(a, b))), as it uses Euclid’s algorithm which takes logarithmic time with respect to the smaller of the two numbers.

The time complexity of the count_common_divisors() function is O(sqrt(gcd(a, b))), as it iterates up to the square root of the gcd of the two numbers.

The space complexity of both functions is O(1), as they only use a constant amount of memory regardless of the input size.

Last Updated :
13 Apr, 2023

Like Article

Save Article


Загрузить PDF


Загрузить PDF

Нахождение наибольшего общего делителя (НОД) для определенного количества чисел может быть легкой задачей, если вы умеете это делать.

  1. Изображение с названием Find the Greatest Common Factor Step 1

    1

    Найдите делители чисел. Начните с поиска всех делителей первого и второго числа.

  2. Изображение с названием Find the Greatest Common Factor Step 2

    2

    Сравните делители обоих чисел и найдите самое большое число, которое есть в списке делителей как первого, так и второго числа. Это число равно НОД.

    Реклама

  1. Изображение с названием Find the Greatest Common Factor Step 3

    1

    Разложите каждое число на простые множители. Простое число — это число, большее 1 и которое делится только на 1 и на само себя. Примеры простых чисел: 5, 17, 97, 331.

  2. Изображение с названием Find the Greatest Common Factor Step 4

    2

    Найдите общие простые множители. Общий простой множитель может быть только один, или их может быть несколько.

  3. Изображение с названием Find the Greatest Common Factor Step 5

    3

    Если у двух чисел есть только один общий простой множитель, то он равен НОД. Если у двух чисел есть несколько общих простых множителей, то их произведение равно НОД.

  4. Изображение с названием Find the Greatest Common Factor Step 6

    4

    Изучите пример. Чтобы продемонстрировать этот метод, изучите пример, приведенный на рисунке.

    Реклама

Советы

  • Простое число — это число, которое делится только на 1 и на само себя.
  • Знаете ли вы, что в третьем веке до н.э. математик Евклид создал алгоритм для вычисления наибольшего общего делителя двух натуральных чисел и двух многочленов?

Реклама

Об этой статье

Эту страницу просматривали 7382 раза.

Была ли эта статья полезной?

Содержание материала

  1. Как определить количество делителей конкретного числа
  2. Видео
  3. Признаки делимости чисел
  4. Определение [ править
  5. Как найти число простых делителей числа
  6. Простые и составные числа
  7. Чем отличаются друг от друга, как найти
  8. Тест Миллера Рабина

Как определить количество делителей конкретного числа

Чтобы узнать, сколько положительных делителей у конкретного числа a, каноническое разложение которого выглядит как a = p 1 s 1 · p 2 s 2 · … · p n s n , нужно найти значение выражения ( s 1 + 1 ) · ( s 2 + 1 ) · … · ( s n + 1 ) . О количестве наборов переменных t 1 , t 2 , … , t n мы можем судить по величине записанного выражения.

Покажем на примере, как это вычисляется. Определим, сколько будет натуральных делителей у числа 3 900 , которое мы использовали в предыдущей задаче. Каноническое разложение мы уже записывали: 3 900 = 2 2 · 3 · 5 2 · 13 . Значит, s 1 = 2 , s 2 = 1 , s 3 = 2 , s 4 = 1 . Теперь подставим значения s 1 , s 2 , s 3 и s 4 в выражение ( s 1 + 1 ) · ( s 2 + 1 ) · ( s 3 + 1 ) · ( s 4 + 1 ) и вычислим его значение. Имеем ( 2 + 1 ) · ( 1 + 1 ) · ( 2 + 1 ) · ( 1 + 1 ) = 3 · 2 · 3 · 2 = 36 . Значит, это число имеет всего 36 делителей, являющихся натуральными числами. Пересчитаем то количество, что у нас получилось в предыдущей задаче, и убедимся в правильности решения. Если учесть и отрицательные делители, которых столько же, сколько и положительных, то получится, что у данного числа всего будет 72 делителя.

Условие: определите, сколько делителей имеет 84 .

Решение

Раскладываем число на множители.

84 42 21 7 1 2 2 3 7

Записываем каноническое разложение: 84 = 2 2 · 3 · 7 . Определяем, сколько у нас получится положительных делителей: ( 2 + 1 ) · ( 1 + 1 ) · ( 1 + 1 ) = 12 . Для учета отрицательных нужно умножить это число на 2 : 2 · 12 = 24 .

Ответ: всего у 84 будет 24 делителя – 12 положительных и 12 отрицательных.

Видео

Признаки делимости чисел

Признаки делимости чисел используются для того, чтобы ускорить процесс деления чисел. Существует множество признаков делимости и других интересных алгоритмов, значительно ускоряющих решение и освобождающих от излишней волокиты. Рассмотрим наиболее популярные из них.

Признак делимости на 10

Любое число, которое оканчивается нулем, делится без остатка на 10. Чтобы получить частное, достаточно отбросить цифру 0 в делимом.

Например, 380 : 10 = 38. Мы просто отбросили последний ноль в числе 380.

В случае, если мы имеем выражение такого вида 385 : 10, то получится 38 и 5 в остатке, поскольку 380 : 10 = 38, а пятерка это остаток, который не разделился.

Таким образом, если число оканчивается цифрой 0, то оно делится без остатка на 10. Если же оно оканчивается другой цифрой, то оно не делится без остатка на 10. Остаток в этом случае равен последней цифре числа. Действительно, в примере 385 : 10 = 38 (5 в остатке), остаток равен последней цифре в числе 385, то есть пятерке.

Признак делимости на 5 и на 2

Любое число, которое оканчивается нулем, делится без остатка и на 5, и на 2.

Примеры:

10 : 5 = 2

100 : 5 = 20

100 : 2 = 50

Признак делимости на 5

Если число оканчивается цифрой 0 или 5, то оно делится без остатка на 5.

Примеры:

355 : 5 = 71

200 : 5 = 40

475 : 5 = 95

Признак делимости на 3

Число делится на 3, если сумма цифр этого числа делится на 3. Например, рассмотрим число 27, сумма его цифр 2 + 7 = 9. Девять, как мы знаем делится на 3, значит и 27 делится на 3:

27 : 3 = 9

Признак делимости на 9

Число делится на 9, если сумма его цифр делится на 9. Например, рассмотрим число 18. Сумма его цифр 1 + 8 = 9. Девять делится на девять, значит и 18 делится на 9

18 : 9 = 2

Рассмотрим число 846. Сумма его цифр 8 + 4 + 6 = 18.  Восемнадцать делится на девять, значит и 846 делится на 9:

Определение [ править

Функция «сумма положительных делителей »σx(n) для вещественного или комплексного числа x определяется как сумма x-х степеней положительных делителей числа n. Функцию можно выразить формулой

σ x ( n ) = ∑ d | n d x , <displaystyle sigma _(n)=sum _d^,!,>

где d | n <displaystyle > dозначает «d делит n». Обозначения d(n), ν(n) и τ(n) (от немецкого Teiler = делитель) используются также для обозначения σ(n), или функции числа делителей [1] [2] . Если x равен 1, функция называется сигма-функцией или суммой делителей [3] , и индекс часто опускается, так что σ(n) эквивалентна σ1(n) [4] .

Аликвотная сумма s(n) для n — это сумма собственных делителей (то есть делители, за исключением самого n [5] , и равна σ1(n) − n. Аликвотная последовательность для n образуется последовательным вычислением аликвотной суммы, то есть каждое последующее значение в последовательности равно аликвотной сумме предыдущего значения.

Как найти число простых делителей числа

Если речь идет о целом малом числе, то решение такой задачи не представляет никакой сложности. Рассмотрим конкретный пример. Найдем простые делители числа 54.

Для этого:

  • 54 делим на «два» и получаем 27;
  • 27 нечетное, поэтому разделим его уже не на «два», а на следующее простое число, т. е. «три»;
  • заметим, что 27=33;
  • таким образом, разложение 54 имеет вид 54 = 21 * 33, т.е. простые делители числа 54 — это «два» и «три».

Однако это не все, что мы хотели знать. Теперь найдем число простых делителей числа 54. Оно равно произведению степеней простых множителей канонического разложения числа n = p1*d1 p2d2*⋅ …⋅*pmdm, увеличенных на 1. Иными словами, в общем случае K = (d1+1)*…* (dm+1).

Тогда для 54 имеем К = 2 * 4 = 8, т. е. общее число делителей равно восьми.

Обратите внимание, что все значительно упростилось, если бы речь шла о 23, 37, 103 и пр., так как каждый знает, сколько делителей у простого числа.

Простые и составные числа

Простым называется число, которое делится без остатка на единицу и на само себя. Другими словами, имеет только два делителя. Например, число 5 делится без остатка на единицу и на само себя:

5 : 1 = 5

5 : 5 = 1

Значит, число 5 является простым числом.

Составным же называется число, которое имеет два и более делителя. Например, число 4 составное, поскольку у него два и более делителя:  4, 2 и 1

4 : 4 = 1

4 : 2 = 2

4 : 1 = 4

Значит, число 4 является составным числом.

Чем отличаются друг от друга, как найти

Делитель отличается от кратного тем, что:

  • делитель — это число, НА которое делится заданное число;
  • кратное — это число, которое само ДЕЛИТСЯ НА заданное число.

Чтобы найти делители числа, нужно данное число разложить на множители.

Разложить на множители — представить число в виде произведения целых чисел.

Чтобы проверить, является ли одно число делителем другого, нужно разделить число на данное нам.

Для нахождения кратного числа заданному числу, нужно это число последовательно умножать на натуральные числа. Каждое полученное число будет кратно — будет делиться — заданному.

Делители и кратные связаны между собой. Например, делителем числа 15 является 3 и число, кратное 3, равно 15.

Тест Миллера Рабина

В криптографических целях часто используют именно этот вид определения простоты числа, который имеет несколько модификаций.

Тест Миллера—Рабина основан на проверке ряда условий, выполняемых для чисел, которые делятся только на 1 и на самих себя. Если хотя бы одно из требований нарушено, это «экзаменуемое» число признается составным.

Для данного m находятся целые нечетное число t и s, такие чтобы выполнялось условие m-1=2st.

Затем выбирается случайное число a, такое что 1<a<m. Если a не свидетельствует о простоте числа m, то программа должна выдать ответ «m составное» и завершить свою работу. В противном случае выбирается другое случайное число a и проверка повторяется снова. После того как будут установлены r свидетелей простоты, должен быть выдан ответ «m, вероятно, простое», и алгоритм завершит свою работу.

Следствием теоремы Рабина является тот факт, что если r чисел, которые выбраны случайно, признаны свидетелями для определения простоты числа m, то вероятность того, что оно составное, не может превосходить (4-r).

Теперь вы знаете, сколько делителей имеет простое

Теперь вы знаете, сколько делителей имеет простое число и как выяснить наиболее примитивный алгоритм вычисления НПД. Эти знания помогут вам в решении многих практических задач.

Теги

Как найти количество делителей

В самом общем случае, количество возможных делителей произвольного числа бесконечно. Фактически, это все не равные нулю числа. Но если речь идет о натуральных числах, то под делителем числа N подразумевается такое натуральное число, на которое нацело делится число N. Количество таких делителей всегда ограничено, а найти их можно с помощью специальных алгоритмов. Также существуют простые делители числа, которые представляют собой простые числа.

Как найти количество делителей

Вам понадобится

  • — таблица простых чисел;
  • — признаки делимости чисел;
  • — калькулятор.

Инструкция

Чаще всего, нужно разложить число на простые множители. Это числа, которые делят исходное число без остатка, и при этом сами могут делиться без остатка только на само себя и единицу (к таким числам относятся 2, 3, 5, 7, 11, 13, 17 и т.д.). Причем, никакой закономерности в ряду простых чисел не найдено. Возьмите их из специальной таблицы или найдите при помощи алгоритма, который называется «решето Эратосфена».

Начинайте подбирать простые числа, на которые делится данное число. Частное снова делите на простое число и продолжаете этот процесс до тех пор, пока в качестве частного не останется простое число. Затем просто посчитайте количество простых делителей, прибавьте к нему число 1 (которое учитывает последнее частное). Результатом будет количество простых делителей, которые при умножении дадут искомое число.

Например, количество простых делителей числа 364 найдите таким образом:

364/2=182
182/2=91
91/7=13

Получите числа 2, 2, 7, 13, которые являются простыми натуральными делителями числа 364. Их количество равно 3 (если считать повторяющиеся делители за один).

Если же нужно найти общее количество всех возможных натуральных делителей числа, воспользуйтесь его каноническим разложением. Для этого по описанной выше методике разложите число на простые множители. Затем запишите число как произведение таких множителей. Повторяющиеся числа возведите в степени, например, если трижды получали делитель 5, то запишите его как 5³.

Записывайте произведение от наименьших множителей к наибольшим. Такое произведение и называется каноническим разложением числа. Каждый множитель этого разложения имеет степень, представленную натуральным числом (1, 2, 3, 4 и т.д.). Обозначьте показатели степени при множителях а1, а2, а3, и т.д. Тогда общее количество делителей будет равно произведению (a1 + 1)∙(a2 + 1)∙(a3+1)∙…

Например, возьмите то же число 364: его каноническое разложение 364=2²∙7∙13. Получите а1=2, а2=1, а3=1, тогда количество натуральных делителей этого числа будет равно (2+1)∙(1+1)∙(1+1)=3∙2∙2=12.

Источники:

  • Число и сумма натуральных делителей натурального числа

Войти на сайт

или

Забыли пароль?
Еще не зарегистрированы?

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти в предложении родственные слова
  • Тест как найти автомобиль
  • Как найти животные игрушки
  • Ритуалы как найти кошку
  • Как найти нок в химии 8 класс

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии