Ниже приведена программа на C для определения числа делителей заданного числа.
Сложность вышеуказанного алгоритма составляет O (sqrt (n)).
Этот алгоритм будет работать правильно для числа, которое является идеальным квадратом, а также для чисел, которые не являются идеальным квадратом.
Обратите внимание, что верхний предел цикла установлен на корень квадратный из числа, чтобы алгоритм был наиболее эффективным.
Обратите внимание, что сохранение верхнего предела в отдельной переменной также экономит время, вы не должны вызывать функцию sqrt в разделе условий цикла for, это также экономит ваше вычислительное время.
#include<stdio.h>
#include<math.h>
int main()
{
int i,n,limit,numberOfDivisors=1;
printf("Enter the number : ");
scanf("%d",&n);
limit=(int)sqrt((double)n);
for(i=2;i<=limit;i++)
if(n%i==0)
{
if(i!=n/i)
numberOfDivisors+=2;
else
numberOfDivisors++;
}
printf("%d\n",numberOfDivisors);
return 0;
}
Вместо приведенного выше цикла for вы также можете использовать следующий цикл, который еще более эффективен, поскольку это устраняет необходимость в нахождении квадратного корня из числа.
for(i=2;i*i<=n;i++)
{
...
}