Ekaterina Kukina (kukina_kat) wrote,
Ekaterina Kukina
kukina_kat

Category:

Про три куба

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

Ну, и я пошутила, что программа пишется за 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


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

Tags: преподское
Subscribe

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 25 comments