ə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ı
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:
Beləliklə
İ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 mathCountDivisors 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)