Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Поля

(Время: 1 сек. Память: 16 Мб Сложность: 16%)

Построение требуемого квадратного поля с целой стороной x возможно при условии выполнения равенства x*x=a*b для некоторого целого x. Это возможно при условии, что x = sqrt(a*b) – целое число. Тогда алгоритм решения задачи может выглядеть просто:

  read(a,b)
  x = int(sqrt(a*b))
  if(x*x = a*b) write(x) else write(0)

Однако, на практике могут возникать проблемы с технической реализацией данного фрагмента. Заметим, что 4-байтового типа недостаточно для решения задачи, поэтому следует использовать типы, позволяющие хранить большие значения. Компиляторы Delphi и Visual C чувствительны к типу аргумента и могут вызывать ошибку компиляции или ошибку времени выполнения, если для переменных a и b выбран 8-байтовый целый тип. Здесь лучше использовать вещественное значение или явное преобразование целого в вещественное.

Другой подход к решению данной задачи может быть основан на полном переборе возможных значений x, которые могут лежать в диапазоне от 1 до 107. Это избавит от операции извлечения квадратного корня, но увеличит время выполнения программы:

  x=0
  while(x*x < a*b) x++;
  if(x*x = a*b) write(x) else write(0)

[Обсуждение] [Все попытки] [Задача]


Красноярский краевой Дворец пионеров, (c)2006 - 2024, ИНН 246305493507, E-mail: admin@acmp.ru