446. Ровные делители

 

Натуральное число m называется ровным делителем числа n, если при делении n на m частное и остаток совпадают. Для заданного натурального числа n найдите количество его ровных делителей.

 

Вход. Одно натуральное число n (1 ≤ n ≤ 106).

 

Выход. Выведите одно число – количество ровных делителей числа n.

 

Пример входа

Пример выхода

20

2

 

 

РЕШЕНИЕ

циклы

 

Анализ алгоритма

Поскольку значение n не слишком велико, можно перебрать в цикле все возможные значения m от 2 до n и проверить выполнение равенства . Подсчитываем количество таких m.

 

Пример

Например, для n = 20 существуют два ровных делителя: 9 и 19, так как

·        20 / 9 = 20 mod 9 = 2;

·        20 / 19 = 20 mod 19 = 1

 

Реализация алгоритма

Читаем входное значение n.

 

scanf("%d",&n);

 

В переменной res подсчитываем количество таких чисел m (2 ≤ mn), для которых частное от деления n на m равно остатку от деления n на m.

 

res = 0;

for(m = 2; m <= n; m++)

  if ((n / m) == (n % m)) res++;

 

Выводим ответ.

 

printf("%d\n",res);   

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int res = 0;

    for(int m = 2; m <= n; m++)

      if ((n / m) == (n % m)) res++;

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

Читаем входное значение n.

 

n = int(input())

 

В переменной res подсчитываем количество таких чисел m (2 ≤ mn), для которых частное от деления n на m равно остатку от деления n на m.

 

res = 0

for m in range(2,n) :

  if (n // m == n % m) : res += 1

 

Выводим ответ.

 

print(res)