![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
Fedor1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.11.2007 Репутация: нет Всего: нет |
Известно что всякое натуральное число можно представить в виде суммы не более чем четырех квадратов натуральных чисел. Для заданного N установить, сколько натуральных чисел, не превосходящих N, можно представить в виде суммы
одного квадрата(т.е.само число) двух квадратов трех квадратов не менее чем четырех квадратов например 30=5^2+2^2+1^2 |
|||
|
||||
Fedor1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.11.2007 Репутация: нет Всего: нет |
народ помогите очень срочно надо
|
|||
|
||||
kali |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 9.11.2006 Где: Минск Репутация: 18 Всего: 20 |
Если очень срочно надо, вот тупой bruteforce
Числа больше 1000 лучше не вводить. А вообще прикольная задача. Я б ее кинул в занимательные задачи или алгоритмы. Это сообщение отредактировал(а) kali - 22.12.2007, 02:28 --------------------
Работая над решением задачи, всегда полезно знать ответ. |
|||
|
||||
Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 1 Всего: 10 |
Можно применить видоизмененный "жадный алгоритм". Просто у числа брать квадратный корень. Потом у остатка и так далее.
-------------------- Пролетал мимо. |
|||
|
||||
kali |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 9.11.2006 Где: Минск Репутация: 18 Всего: 20 |
Такой алгоритм не даст минимально возможной разбивки. Например твоим алгоритмом. 23=16+4+1+1+1; Минимально возможная разбивка. 23=9+9+4+1; --------------------
Работая над решением задачи, всегда полезно знать ответ. |
|||
|
||||
Fedor1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.11.2007 Репутация: нет Всего: нет |
Ты наверно не понял суть проблемы.
Проблема заключается в том что любое число можно разбить в сумму четырех квадратов(но не более того) это для любого числа. вот смотри пример 5=2^2+1^2+0^2+0^2 23=3^2 + 3^2 + 2^2 + 1^2 |
|||
|
||||
kali |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 9.11.2006 Где: Минск Репутация: 18 Всего: 20 |
Я все отлично понял.
Просто может существовать несколько вариантов разбиения. К слову, 0-не является натуральным числом. P.S. Для какого максимального N должна работать программа? Это сообщение отредактировал(а) kali - 22.12.2007, 20:36 --------------------
Работая над решением задачи, всегда полезно знать ответ. |
|||
|
||||
Fedor1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.11.2007 Репутация: нет Всего: нет |
число [N] может любое, но кроме нуля.
Ноль все равно разбить никак в принципе нельзя. |
|||
|
||||
kali |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 9.11.2006 Где: Минск Репутация: 18 Всего: 20 |
Тебя приведенный выше код устраивает?
--------------------
Работая над решением задачи, всегда полезно знать ответ. |
|||
|
||||
Fedor1989 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 24.11.2007 Репутация: нет Всего: нет |
Большое спосибо за код.
Опиши по конкретней свой алгоритм,а то я несовсем понял его |
|||
|
||||
kali |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 9.11.2006 Где: Минск Репутация: 18 Всего: 20 |
Считываем число N.
В главном цикле перебираем все числа i от 1 до N. Для каждого вычисляем max- максимальное натуральное число, квадрат которого не превышает i. Далее в четырех вложенных циклах перебираем все возможные комбинации чисел от 1 до max без учета комбинаций получаемых путем перестановок. Затем подсчитываем суммы квадратов одного, двух, трех, и четырех чисел для текущей комбинации. Если сумма совпадает с i, смотрим на сколько квадратов разбилось число, сравниваем с предыдущим значением и запоминаем минимальное. После перебора всех комбинаций, увеличиваем на единицу элемент массива результатов соответствующий минимальному количеству чисел на квадраты которых разбивается i. --------------------
Работая над решением задачи, всегда полезно знать ответ. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |