Про три куба

Студенты интересовались недавно задачкой: какие натуральные числа можно разложить в сумму трех кубов натуральных чисел, а какие нельзя. Подумав немного, задачу я не решила. А потом оказалось, что им не абстрактно эта задача нужна, а нужно написать программку, которая по заданному числу будет его раскладывать (либо не раскладывать) в сумму трех кубов.

Ну, и я пошутила, что программа пишется за 2 часа, если это просто программка, а не извращение какое-то типа “составить sql-запрос”. А придя домой подумала, а почему бы и не составить sql-запрос? На составление ушло минут 10, 9 из которых я вспоминала как правильно пользоваться CTE.

Вот запрос, который выводит таблицу всех разбиений чисел от 700 000 до 800 000.

with t as
(
 select 1 as a, 1 as a3
 union all
 select a+1 as a, (a+1)*(a+1)*(a+1) as a3 from t
 where t.a<100
)
select a,b,c,S
from (
      select t1.a as a, t2.a as b, t3.a as c, t1.a3+t2.a3+t3.a3 as S
      from t t1
      join t t2   on (t1.a<=t2.a)
      join t t3   on (t2.a<=t3.a)
     ) deccube
where (s<800000) and (s>700000)
order by s

Вобщем, я молодец. Почти как студентка.

  • bukov_ka 2012-05-01T10:04:57Z

    Молодец, жена! :)
  • [deleted] 2012-05-01T10:39:35Z

    • kukina_kat 2012-05-01T15:12:45Z

      Не, я думаю, правильно поступили. Вобще, советоваться с преподавателями по отвлеченным вопросам -- милое дело. Они, может, чего полезного насоветуют. Чай не гугл )))
      • [deleted] 2012-05-01T15:23:00Z

        • kukina_kat 2012-05-01T15:59:52Z

          Есть несколько способов справиться поставленной задачей: решить самому, обратиться за помощью, прочитать в книжке, списать, забить. Первый самый хороший и самый азартный. Однако же, не факт, что возможный: не все задачи можно решить самостоятельно. Я иногда, кстати, даю задачки студентам, которые им не по силам, но есть в любом учебнике. Как раз из рассчета, что они почитают книжки и их грамотность повысится. А обратиться к преподавателю -- он либо книжку посоветует почитать, либо может рассказать что-то такое интересное, чего ни в одной книжке не найдешь. Поэтому это хороший выход. Списать -- самый убогий выход, а забить -- неприемлемый )))
          • [deleted] 2012-05-01T16:09:00Z

            • kukina_kat 2012-05-01T18:15:51Z

              Совсем я списывание никогда не исключаю. Считаю его крайним выходом из ситуации. Это в бесконечное число раз лучше, чем совсем ничего не делать. )))) Только прикалывает, когда списывание совсем бездумное. Вместо "const" у человека возникает "cos t", вместо "ln 40" возникает "1440" и что-то подобное. Т.е. списывание на уровне спинного мозга, без передачи сигнала в головной ))))
  • [deleted] 2012-05-01T11:38:47Z

    • kukina_kat 2012-05-01T15:13:17Z

      А там разве нет требования, что на c++?
      • [deleted] 2012-05-03T04:17:15Z

        • kukina_kat 2012-05-03T07:10:14Z

          Ага, понятно. Я ж задания не читала ))
  • [deleted] 2012-05-01T12:07:34Z

    • kukina_kat 2012-05-01T15:14:23Z

      Ну, чисто теоретически sql должен быть эквивалентен Машине Тьюринга или Машине с Неограниченными Регистрами, как я прикидываю. Т.е. на нем можно вобще почти что угодно писать ))) Просто извращение.
  • [deleted] 2012-05-01T13:30:46Z

    • kukina_kat 2012-05-01T15:17:56Z

      Почему практически? Отличница и есть!
  • [deleted] 2012-05-01T15:46:38Z

    • kukina_kat 2012-05-01T16:01:59Z

      >в какой реализации SQL

      Вы нашли, что спросить у математика.

    • bukov_ka 2012-05-01T16:06:18Z

      > Просто интересно в какой реализации SQL возможны SELECT без FROM В диалекте MS SQL Server так.

      и рекурсивные запросы, которые делают SELECT FROM из самих себя. Обычные рекурсивные CTE. В Оракле, насколько я знаю, рекурсивные CTE появились с версии 11g Release 2.

      Для повышения образованности что ж это за CTE такое Вы же при переписывании их же использовали. :) Вбейте в Гугл “cte sql” или “Common table expressions”. Удобная штука, широко сейчас поддерживаемая.

  • [deleted] 2012-05-02T04:05:23Z

    • kukina_kat 2012-05-02T18:33:33Z

      Ну, ты нашел, что спросить у математика. )))