Сумма квадратов разницы


15

Сумма квадратов первых десяти натуральных чисел равна 12+22++102=385

Квадрат суммы первых десяти натуральных чисел равен

(1+2+...+10)2=552=3025

Следовательно, разница между суммой квадратов первых десяти натуральных чисел и квадратом суммы равна

3025385=2640

Для заданного ввода n найдите разницу между суммой квадратов первых n натуральных чисел и квадратом суммы.

Контрольные примеры

1       => 0
2       => 4
3       => 22
10      => 2640
24      => 85100
100     => 25164150

Эта проблема была впервые объявлена ​​в Project Euler # 6 .

Критерии победы

  • Нет правил о том, как должно быть поведение с отрицательным или нулевым вводом.

  • Самый короткий ответ выигрывает.


4
Для этого испытания требуется критерий победы (например, код гольф)
dylnan

2
Это подмножество этого вопроса
caird coinheringaahing

1
Может ли последовательность быть проиндексирована 0? т.е. натуральные числа до n?
Джо Кинг,


3
@ Enigma Я действительно не думаю, что это дубликат цели, так как многие ответы здесь не всегда легко быть ответами, поэтому это что-то добавляет.
Джонатан Аллан

Ответы:




8

APL (Dyalog Unicode) , 10 байт

1⊥⍳×⍳×1-⍨⍳

Попробуйте онлайн!

Как это устроено

1⊥⍳×⍳×1-⍨⍳
  ⍳×⍳×1-⍨⍳  Compute (x^3 - x^2) for 1..n
1          Sum

Использует тот факт, что «квадрат суммы» равен «сумме кубов».


Для меня 1⊥⍳ × ⍳ × 1-⍨⍳ не является функцией; Я попробовал 1⊥⍳ × ⍳ × 1-⍨⍳10 и для меня не скомпилировать ...
RosLuP

1
@RosLuP Вы должны сначала назначить его переменной (как я это сделал в ссылке TIO) или заключить в пару круглых скобок, как (1⊥⍳×⍳×1-⍨⍳)10.
Bubbler

7

TI-Basic (серия TI-83), 12 11 байтов

sum(Ans² nCr 2/{2,3Ans

Осуществляет (n22)(12+13n). Принимает ввод вAns: например, запустить,10:prgmXчтобы вычислить результат для ввода10.


Хорошее использование nCr!
Линн


5

Древесный уголь , 12 10 байт

IΣEN×ιX⊕ι²

Попробуйте онлайн! Ссылка на подробную версию кода. Пояснение: (1nx)2=1nx3 так(1nx)21nx2=1n(x3x2)=1n(x1)x2=0n1x(x+1)2.

   N        Input number
  E         Map over implicit range i.e. 0 .. n - 1
        ι   Current value
       ⊕    Incremented
         ²  Literal 2
      X     Power
     ι      Current value
    ×       Multiply
 Σ          Sum
I           Cast to string
            Implicitly print


4

Japt -x, 9 8 5 4 байта

õ²í*

Попытайся


объяснение

õ        :Range [1,input]
 ²       :Square each
  í      :Interleave with 0-based indices
   *     :Reduce each pair by multiplication
         :Implicit output of the sum of the resulting array




3

Mathematica, 21 17 байт

-4 байта благодаря алефальфе .

(3#+2)(#^3-#)/12&

Чистая функция. Принимает целое число в качестве входных данных и возвращает целое число в качестве выходных данных. Просто реализует полином, так как Sums, Ranges, Trs и т. Д. Занимают много байтов.



@alephalpha Спасибо!
LegionMammal978

Это можно сделать, не оценивая полином: #.(#^2-#)&@*Rangeреализует другое общее решение. (Но это также 17 байт.) И мы можем реализовать наивный алгоритм в 18 байт: Tr@#^2-#.#&@*Range.
Миша Лавров




3

С, С ++, 46 40 37 байт (#define), 50 47 46 байт (функция)

-1 байт благодаря Zacharý

-11 байт, благодаря потолку

Макро версия:

#define F(n)n*n*~n*~n/4+n*~n*(n-~n)/6

Версия функции:

int f(int n){return~n*n*n*~n/4+n*~n*(n-~n)/6;}

Эти строки основаны на 2 формулах:

Сумма чисел от 1 до n = n*(n+1)/2
Сумма квадратов от 1 до n =n*(n+1)*(2n+1)/6

Таким образом, формула, чтобы получить ответ просто (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

И теперь, чтобы «оптимизировать» количество байтов, мы разбиваем круглые скобки и перемещаем вещи, в то время как тестирование всегда дает один и тот же результат

(n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6=> n*(n+1)/2*n*(n+1)/2 - n*(n+1)*(2n+1)/6=> n*(n+1)*n*(n+1)/4 - n*(n+1)*(2n+1)/6

Обратите внимание на шаблон p = n*n+1 = n*n+n, поэтому в функции мы объявляем другую переменную, int p = n*n+nи она дает:

p*p/4 - p*(2n+1)/6

Ибо p*(p/4-(2*n+1)/6)и так n*(n+1)*(n*(n+1)/4 - (2n+1)/6), это работает только половину времени, и я подозреваю, что причиной является целочисленное деление (f(3) даем 24 вместо 22, f(24)даем 85200 вместо 85100, поэтому мы не можем разложить формулу макроса таким образом, даже если математически это то же самое.

И макро, и версия функции находятся здесь из-за замены макроса:

F (3) дает 3*3*(3+1)*(3+1)/4-3*(3+1)*(2*3+1)/6 = 22
F (5-2) дает5-2*5-2*(5-2+1)*(5-2+1)/4-5-2*(5-2+1)*(2*5-2+1)/6 = -30

и запутаться с приоритетом оператора. версия функции не имеет этой проблемы


1
Вы могли бы исправить эту проблему с макросами в цене много байт, заменяя все nс (n). Кроме того, F(n) n=> F(n)nнезависимо.
Захари

Можно переставить return p*p/4-p*(n-~n)/6на return(p/4-(n-~n)/6)*p.
Захари

@ Zacharý Нет, это иногда дает мне плохие результаты, например, 24 вместо 22 для ввода «3» или 85200 вместо 85100 для ввода «24». Я подозреваю, что причиной этого
является

Тьфу, всегда забывай об этом.
Захари


2

Pyth, 7 байт

sm**hdh

Попробуйте онлайн здесь .

Использует формулу в ответе Нейла .

sm**hdhddQ   Implicit: Q=eval(input())
             Trailing ddQ inferred
 m       Q   Map [0-Q) as d, using:
    hd         Increment d
   *  hd       Multiply the above with another copy
  *     d      Multiply the above by d
s            Sum, implicit print 



2

05AB1E , 6 байтов

LnDƶαO

Попробуйте онлайн!

объяснение

L         # push range [1 ... input]
 n        # square each
  D       # duplicate
   ƶ      # lift, multiply each by its 1-based index
    α     # element-wise absolute difference
     O    # sum

Некоторые другие версии с таким же количеством байтов:

L<ān*O
Ln.āPO
L¦nā*O



2

MathGolf , 6 байтов

{î²ï*+

Попробуйте онлайн!

Рассчитывает ΣКзнак равно1N(К2(К-1))

Объяснение:

{       Loop (implicit) input times
 î²     1-index of loop squared
    *   Multiplied by
   ï    The 0-index of the loop
     +  And add to the running total

2

Clojure , 58 байт

(fn[s](-(Math/pow(reduce + s)2)(reduce +(map #(* % %)s))))

Попробуйте онлайн!


Редактировать: я неправильно понял вопрос

Clojure , 55 , 35 байт

#(* %(+ 1 %)(- % 1)(+(* 3 %)2)1/12)

Попробуйте онлайн!


1
Спасибо за исправление. И только заголовки относительно вашей последней записи, (apply +короче (reduce +.
Carcigenicate

@Carcigenicate Спасибо!
TheGreatGeek

1
Не могли бы вы отредактировать постоянную ссылку для запуска одного из тестовых случаев? На самом деле, я не помогаю людям, которые не знают Clojure.
Деннис

2

cQuents , 17 15 байтов

b$)^2-c$
;$
;$$

Попробуйте онлайн!

объяснение

 b$)^2-c$     First line
:             Implicit (output nth term in sequence)
 b$)          Each term in the sequence equals the second line at the current index
    ^2        squared
      -c$     minus the third line at the current index

;$            Second line - sum of integers up to n
;$$           Third line - sum of squares up to n

1

APL (NARS), 13 символов, 26 байтов

{+/⍵×⍵×⍵-1}∘⍳

используйте формулу Sum'w = 1..n '(w w (w-1)), возможно, я написал то же, что и некоторые другие записи + или -, как "1⊥⍳ × ⍳ × ⍳-1"; тестовое задание:

  g←{+/⍵×⍵×⍵-1}∘⍳
  g 0
0
  g 1
0
  g 2
4
  g 3
22
  g 10
2640


1

QBASIC, 45 44 байта

Чистая математика экономит 1 байт!

INPUT n
?n^2*(n+1)*(n+1)/4-n*(n+1)*(2*n+1)/6

Попробуйте это онлайн!


Предыдущий ответ на основе цикла

INPUT n
FOR q=1TO n
a=a+q^2
b=b+q
NEXT
?b^2-a

Попробуйте онлайн!

Обратите внимание, что REPL немного более расширен, потому что интерпретатор не работает в противном случае.


1

JAEL , 13 10 байт

#&àĝ&oȦ

Попробуйте онлайн!

Объяснение (генерируется автоматически):

./jael --explain '#&àĝ&oȦ'
ORIGINAL CODE:  #&àĝ&oȦ

EXPANDING EXPLANATION:
à => `a
ĝ => ^g
Ȧ => .a!

EXPANDED CODE:  #&`a^g&o.a!

COMPLETED CODE: #&`a^g&o.a!,

#          ,            repeat (p1) times:
 &                              push number of iterations of this loop
  `                             push 1
   a                            push p1 + p2
    ^                           push 2
     g                          push p2 ^ p1
      &                         push number of iterations of this loop
       o                        push p1 * p2
        .                       push the value under the tape head
         a                      push p1 + p2
          !                     write p1 to the tapehead
            ␄           print machine state

1

05AB1E , 6 байтов

LDOšnÆ

Попробуйте онлайн!

Объяснение:

           # implicit input (example: 3)
L          # range ([1, 2, 3])
 DOš       # prepend the sum ([6, 1, 2, 3])
    n      # square each ([36, 1, 4, 9])
     Æ     # reduce by subtraction (22)
           # implicit output

Æне часто бывает полезно, но пришло время сиять. Это бьет по наивности LOnILnO-двумя целыми байтами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.