Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> полнократные числа 
V
    Опции темы
1101s
Дата 12.9.2018, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.9.2018

Репутация: нет
Всего: нет



Здравствуйте, бьюсь над задачей, и никак не доходит, как адекватно располагать loops и if-else. Задачка такая: нужно написать программу, которая указывает полнократное ли n, (2 <= n <= 2000000000). То есть число, корень которого является свободным от квадратов. Например, 21 - свободное от квадратов число, 21^2 = 441, значит 441 - полнократное. В задаче нельзя использовать никакие математические функции, по сути только петли и if-else. Народ, помогите плес.
****


Это сообщение отредактировал(а) 1101s - 13.9.2018, 00:52
PM MAIL   Вверх
feodorv
Дата 13.9.2018, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Если я правильно понял, то не полные квадраты (например, 2 или 3) не являются полнократными числами?

Число полных квадратов, меньших или равных 2*10^9, около 45000. Так что всё можно предрасчитать заранее, в дальнейшем пользуясь лишь бинарным поиском. А можно всё сделать в одном месте:
Код

bool isFullFoldNumber( int n )
{
  int sq, d;
  for( sq = 1; sq * sq < n; ++sq) /* nothing */;
  if( sq * sq != n ) return false;
  for( d = 2; d * d <= sq; ++d)
    if( sq % (d * d) == 0 ) return false;
  return true;
}


Другой подход - факторизация числа с последующими проверками. Приведённый код не тестировал. Успехов!


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
okalitut
Дата 7.12.2018, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 7.12.2018

Репутация: нет
Всего: нет



Цитата(feodorv @ 13.9.2018,  12:32)
Если я правильно понял, то не полные квадраты (например, 2 или 3) не являются полнократными числами?

Число полных квадратов, меньших или равных 2*10^9, около 45000. Так что всё можно предрасчитать заранее, в дальнейшем пользуясь лишь бинарным поиском. А можно всё сделать в одном месте:
Код

bool isFullFoldNumber( int n )
{
  int sq, d;
  for( sq = 1; sq * sq < n; ++sq) /* nothing */;
  if( sq * sq != n ) return false;
  for( d = 2; d * d <= sq; ++d)
    if( sq % (d * d) == 0 ) return false;
  return true;
}


Другой подход - факторизация числа с последующими проверками. Приведённый код не тестировал. Успехов!

Была похожая задача, и в решении очень помог ваш ответ! Спасибо!
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1083 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.