-ni sabit edək (məsələn j = 12) və i = \text{ƏBOB}(i, 12) olan belə -lərin sayını tapaq. Bu bərabərliyi ödəyən qiymətlərini tapaq. Bunlar i = 1, 2, 3, 4, 6, 12 olacaq. Yəni -nin böləni olan istənilən , i = \text{ƏBOB}(i, 12) bərabərliyini ödəyir.
i = \text{ƏBOB}(i, j) olan belə -lərin sayı ədədinin bölənlərinin sayına, yəni -yə bərabərdir. 1 \le j \le n olduğundan, -dən -ə qədər olan ədədlərin bütün bölənlərinin sayını tapmaq qalır. Yəni aşağıdakı cəmi tapmaq lazımdır
-in hesablanması ədədinin faktorizasiyasını tələb etdiyindən, göstərilən cəmin birbaşa hesablanması vaxt tələb edəcək.
Bölənlərin cəminə başqa cür baxaq. -dən -ə qədər olan ədədlərin bölənləri arasında bir \lfloor{n \over 1}\rfloor dəfə, iki \lfloor{n \over 2}\rfloor dəfə və s. rast gələcək (yəni böləni \lfloor{n \over i}\rfloor dəfə rast gələcək). Axtarılan tam ədəd cütlərinin sayı bərabərdir
Göstərilən cəmi vaxt ərzində tapmaq olar.
Misal
n = 6 olduqda aşağıdakı cütləri əldə edirik:
Cütlərin sayı bərabərdir
Alqoritmin realizasiyası
qiymətini oxuyuruq.
scanf("%d",\&n);Cavabı düstur üzrə hesablayırıq və çap edirik.
s = 0;
for (i = 1; i \<= n; i++)
s += n / i;
printf("%d\n",s);Java realizasiyası
import java.util.*;
class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);
int n = con.nextInt();
int s = 0;
for(int i = 1; i \<= n; i++)
s += n / i;
System.out.println(s);
con.close();
}
}Python realizasiyası
qiymətini oxuyuruq.
n = int(input())Cavabı düstur üzrə hesablayırıq və çap edirik.
s = 0
for i in range(1,n+1):
s += n // i
print(s)