# Sum square difference

The sum of the squares of the first ten natural numbers is, $$\1^2 + 2^2 + \dots + 10^2 = 385\$$

The square of the sum of the first ten natural numbers is,

$$\(1 + 2 + ... + 10)^2 = 55^2 = 3025\$$

Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is

$$\3025 − 385 = 2640\$$

For a given input n, find the difference between the sum of the squares of the first n natural numbers and the square of the sum.

Test cases

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


This challenge was first announced at Project Euler #6.

### Winning Criteria

• There are no rules about what should be the behavior with negative or zero input.

• This challenge needs a winning criterion (e.g. code golf) – dylnan Nov 4 '18 at 19:25
• This is a subset of this question – caird coinheringaahing Nov 4 '18 at 19:45
• Can the sequence be 0 indexed? i.e. the natural numbers up to n? – Jo King Nov 4 '18 at 23:49
• – user202729 Nov 5 '18 at 5:53
• @Enigma I really don't think that this is a duplicate of the target since many answers here don't port easily to be answers of that, so this adds something. – Jonathan Allan Nov 5 '18 at 8:33

# Jelly,  5  4 bytes

Ḋ²ḋṖ


Try it online!

### How?

Implements $$\\sum_{i=2}^n{(i^2(i-1))}\$$...

Ḋ²ḋṖ - Link: non-negative integer, n
Ḋ    - dequeue (implicit range)       [2,3,4,5,...,n]
²   - square (vectorises)            [4,9,16,25,...,n*n]
Ṗ - pop (implicit range)           [1,2,3,4,...,n-1]
ḋ  - dot product                    4*1+9*2+16*3+25*4+...+n*n*(n-1)


# Python 3,  28  27 bytes

-1 thanks to xnor

lambda n:(n**3-n)*(n/4+1/6)


Try it online!

Implements $$\n(n-1)(n+1)(3n+2)/12\$$

Python 2,  29  28 bytes: lambda n:(n**3-n)*(3*n+2)/12

• You can shave a byte with n*~-n**2* or (n**3-n)*. – xnor Nov 5 '18 at 0:33

# APL (Dyalog Unicode), 10 bytes

1⊥⍳×⍳×1-⍨⍳


Try it online!

### How it works

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


Uses the fact that "square of sum" is equal to "sum of cubes".

• For me 1⊥⍳×⍳×1-⍨⍳ is not a function ; I tried 1⊥⍳×⍳×1-⍨⍳10 and for me not compile... – RosLuP Nov 5 '18 at 13:32
• @RosLuP You have to assign it to a variable first (as I did in the TIO link) or wrap it inside a pair of parentheses, as (1⊥⍳×⍳×1-⍨⍳)10. – Bubbler Nov 5 '18 at 23:10

# TI-Basic (TI-83 series), 12 11 bytes

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


Implements $$\\binom{n^2}{2}(\frac12 + \frac1{3n})\$$. Takes input in Ans: for example, run 10:prgmX to compute the result for input 10.

• Nice use of nCr! – Lynn Nov 5 '18 at 12:42

# Brain-Flak, 747268 64 bytes

((([{}])){({}())}{})([{({}())({})}{}]{(({}())){({})({}())}{}}{})


Try it online!

Pretty simple way of doing it with a couple of tricky shifts. Hopefully someone will find some more tricks to make this even shorter.

# Charcoal, 12 10 bytes

ＩΣＥＮ×ιＸ⊕ι²


Try it online! Link is to verbose version of code. Explanation: $$\ ( \sum_1^n x )^2 = \sum_1^n x^3 \$$ so $$\ ( \sum_1^n x )^2 - \sum_1^n x^2 = \sum_1^n (x^3 - x^2) = \sum_1^n (x - 1)x^2 = \sum_0^{n-1} x(x + 1)^2 \$$.

   Ｎ        Input number
Ｅ         Map over implicit range i.e. 0 .. n - 1
ι   Current value
⊕    Incremented
²  Literal 2
Ｘ     Power
ι      Current value
×       Multiply
Σ          Sum
Ｉ           Cast to string
Implicitly print


# Perl 6, 22 bytes

{sum (1..$_)>>²Z*^$_}


Try it online!

Uses the construction $$\ \sum_{i=1}^n {(i^2(i-1))} \$$

# Japt -x, 985 4 bytes

õ²í*


Try it

## Explanation

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


# JavaScript, 20 bytes

f=n=>n&&n*n*--n+f(n)


Try it online

• what deviltry is this – don bright May 14 at 3:10

# APL(Dyalog), 17 bytes

{+/(¯1↓⍵)×1↓×⍨⍵}⍳


(Much longer) Port of Jonathan Allan's Jelly answer.

Try it online!

• Go tacit and combine the drops: +/¯1↓⍳×1⌽⍳×⍳ – Adám Nov 5 '18 at 15:50

# APL (Dyalog), 16 bytes

((×⍨+/)-(+/×⍨))⍳


Try it online!

 (×⍨+/)            The square (× self) of the sum (+ fold)
-           minus
(+/×⍨)     the sum of the square
(             )⍳   of [1, 2, … input].

• (+/×⍨)1⊥×⍨ as per tip. – Adám Nov 5 '18 at 15:46
• A further byte could be saved by keeping the ⍳ inside (×⍨1⊥⍳)-⍳+.×⍳ – Cows quack Nov 5 '18 at 18:43

# Mathematica, 21 17 bytes

-4 bytes thanks to alephalpha.

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


Pure function. Takes an integer as input and returns an integer as output. Just implements the polynomial, since Sums, Ranges, Trs, etc. take up a lot of bytes.

• (3#+2)(#^3-#)/12& – alephalpha Nov 5 '18 at 4:43
• @alephalpha Thanks! – LegionMammal978 Nov 5 '18 at 11:18
• It's possible to get there without just evaluating the polynomial: #.(#^2-#)&@*Range implements another common solution. (But it's also 17 bytes.) And we can implement the naive algorithm in 18 bytes: Tr@#^2-#.#&@*Range. – Misha Lavrov Nov 5 '18 at 15:46

# Java (JDK), 23 bytes

n->(3*n+2)*(n*n*n-n)/12


Try it online!

# dc, 16 bytes

?dd3^r-r3*2+*C/p


Implements $$\(n^3-n)(3n+2)/12\$$

Try it online!

# 05AB1E, 8 bytes

ÝDOnsnO-


Explanation:

ÝDOnsnO-     //Full program
Ý            //Push [0..a] where a is implicit input
D           //Duplicate top of stack
On         //Push sum, then square it
s        //Swap top two elements of stack
nO      //Square each element, then push sum
-     //Difference (implicitly printed)


Try it online!

• LDnOsOn- was my first attempt too. – Magic Octopus Urn Nov 7 '18 at 4:23

## C, C++, 4640 37 bytes ( #define ), 5047 46 bytes ( function )

-1 byte thanks to Zacharý

-11 bytes thanks to ceilingcat

Macro version :

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


Function version :

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


Thoses lines are based on thoses 2 formulas :

Sum of numbers between 1 and n = n*(n+1)/2
Sum of squares between 1 and n = n*(n+1)*(2n+1)/6

So the formula to get the answer is simply (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

And now to "optimize" the byte count, we break parenthesis and move stuff around, while testing it always gives the same result

(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

Notice the pattern p = n*n+1 = n*n+n, so in the function, we declare another variable int p = n*n+n and it gives :

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

For p*(p/4-(2*n+1)/6) and so n*(n+1)*(n*(n+1)/4 - (2n+1)/6), it works half the time only, and I suspect integer division to be the cause ( f(3) giving 24 instead of 22, f(24) giving 85200 instead of 85100, so we can't factorize the macro's formula that way, even if mathematically it is the same.

Both the macro and function version are here because of macro substitution :

F(3) gives 3*3*(3+1)*(3+1)/4-3*(3+1)*(2*3+1)/6 = 22
F(5-2) gives 5-2*5-2*(5-2+1)*(5-2+1)/4-5-2*(5-2+1)*(2*5-2+1)/6 = -30

and mess up with the operator precedence. the function version does not have this problem

• You could fix up the problem with the macros at the cost of A LOT of bytes by replacing all the n with (n). Also, F(n) n=>F(n)n regardless. – Zacharý Nov 6 '18 at 14:09
• It's possible to rearrange return p*p/4-p*(n-~n)/6 to return(p/4-(n-~n)/6)*p. – Zacharý Nov 10 '18 at 19:41
• @Zacharý No, it gives me bad results sometimes like 24 instead of 22 for input "3", or 85200 instead of 85100 for input "24". I suspect integer division to be the cause of that – HatsuPointerKun Nov 10 '18 at 21:38
• Ugh, always forget about that. – Zacharý Nov 10 '18 at 21:39

# JavaScript (ES6), 22 bytes

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


Try it online!

# perl -nE, 37 bytes

say+(3*$_**4+2*$_**3-3*$_**2-2*$_)/12

• 31 bytes – Xcali May 13 at 15:36

# Pyth, 7 bytes

sm**hdh


Try it online here.

Uses the formula in Neil's answer.

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


# SNOBOL4 (CSNOBOL4), 70 69 bytes

 N =INPUT
I X =X + N ^ 3 - N ^ 2
N =GT(N) N - 1 :S(I)
OUTPUT =X
END


Try it online!

# Pari/GP, 21 bytes

n->(3*n+2)*(n^3-n)/12


Try it online!

# 05AB1E, 6 bytes

LnDƶαO


Try it online!

Explanation

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


Some other versions at the same byte count:

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

# R, 28 bytes

x=1:scan();sum(x)^2-sum(x^2)


Try it online!

• sum(x<-1:scan())^2-sum(x^2) for -1 – J.Doe Nov 7 '18 at 14:02

# MathGolf, 6 bytes

{î²ï*+


Try it online!

Calculates $$\\sum_{k=1}^n (k^2(k-1))\$$

### Explanation:

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


# Clojure, 58 bytes

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


Try it online!

# Clojure, 55, 35 bytes

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


Try it online!

• Thanks for fixing that. And just a heads up regarding your last entry, (apply + is shorter than (reduce +. – Carcigenicate Nov 6 '18 at 1:05
• @Carcigenicate Thanks! – TheGreatGeek Nov 6 '18 at 1:09
• Could you edit your permalink to run one of the test cases? As it is, I doesn't help people who don't know Clojure. – Dennis Nov 6 '18 at 1:47

# cQuents, 17 15 bytes

b$)^2-c$
;\$
;$$ Try it online! ## Explanation  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


# APL(NARS), 13 chars, 26 bytes

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


use the formula Sum'w=1..n'(ww(w-1)) possible i wrote the same some other wrote + or - as "1⊥⍳×⍳×⍳-1"; test:

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


# Stax, 4 bytes

╡⌠(♠


Run and debug it

For all positive k integers up to the input, add k^2 * (k-1).

# QBASIC, 45 44 bytes

Going pure-math saves 1 byte!

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


Try THAT online!

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


Try it online!

Note that the REPL is a bit more expanded because the interpreter fails otherwise.

# JAEL, 13 10 bytes

#&àĝ&oȦ


Try it online!

## Explanation (generated automatically):

./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