Bölənlərin sayı#4742

Bölənlərin sayı (Həll təhlili)

ədədinin bölənlərinin sayını ifadə etsin. Aydındır ki, d(1) = 1.

Tutaq ki, sadə ədəddir. Onda iki bölənə malikdir: və . Beləliklə, d(p) = 2.

Tutaq ki, n = p^k sadə ədədin qüvvətidir. Onda (k + 1) bölənə malikdir: 1, p, p_2, p_3, ..., p^k. Deməli, d(p^k) = k + 1.

Tutaq ki, n = p^k q^l. İki çoxluq düşünək: P ={1, p, p_2, p_3, ..., p_k} və Q = {1, q, q_2, q_3, ..., q_l}

Hər hansı p^k q^l ədədinin bölənini d = x \cdot y şəklində təsvir etmək olar, burada x \in P, y \in Q. –dəki bölənini k + 1 yolla, –dəki bölənini isə l + 1 yolla seçmək olar. Beləliklə, d = x \cdot y bölənini (k + 1) \cdot (l + 1) yolla yığmaq olar.

ərazıasında sadə bölüklərə ayıraq: n = p_1^{a_1}p_2^{a_2}...p_k^{a_k}. ədədinin bölənlərinin sayı

d(n) = (a_1 + 1) \cdot (a_2 + 1) \cdot ... \cdot (a_k + 1)

Nümunə

n = 18 ədədinin böləni var: 1, 2, 3, 6, 9, 18.

n = 18 ədədini sadə bölüklərə ayıraq:

18 = 2 \cdot 3^2

Beləliklə

d(18) = (1 + 1) \cdot (2 + 1) = 2 \cdot 3 = 6

İki böləni ( və ) çıxırıq, nəticə: bölən.

Alqoritmin icrası

CountDivisors funksiyası ədədini sadə bölüklərə ayırır və onun bölənlərinin sayını hesablamaq üçün istifadə edir.

int CountDivisors(int n)
{
  int c, i, res = 1;
  for(i = 2; i * i <= n; i++)
  {
    if (n % i == 0)
    {
      c = 0;
      while(n % i == 0)
      {
        n /= i;
        c++;
      }
      res *= (c + 1);
    }
  }
  if (n > 1) res *= 2;
  return res;
}

Proqramın əsas hissəsi. Giriş qiyməti oxunur.

scanf("%d",&n);

Nəticəni hesablamaq və çap etmək. Ümumi bölənlərin sayından iki böləni çıxırıq: və öz ədədi .

printf("%d\n",CountDivisors(n)-2);

Python icrası

import math

CountDivisors funksiyası ədədini sadə bölüklərə ayırır və onun bölənlərinin sayını hesablamaq üçün istifadə edir.

def CountDivisors(n):
  res = 1;
  for i in range(2, int(math.sqrt(n)) + 1):
    if (n % i == 0):
      c = 0
      while (n % i == 0):
        n //= i
        c += 1
      res *= (c + 1);
  if (n > 1): res *= 2;
  return res;

Proqramın əsas hissəsi. Giriş qiyməti oxunur.

n = int(input())

Nəticəni hesablamaq və çap etmək. Ümumi bölənlərin sayından iki böləni çıxırıq: və öz ədədi .

print(CountDivisors(n) - 2)