Suma kwadratowa różnica

15

Suma kwadratów pierwszych dziesięciu liczb naturalnych wynosi: 12+22++102=385

Kwadrat sumy pierwszych dziesięciu liczb naturalnych to:

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

Stąd różnica między sumą kwadratów pierwszych dziesięciu liczb naturalnych a kwadratem sumy wynosi

3025385=2640

Dla danych wejściowych n znajdź różnicę między sumą kwadratów pierwszych n liczb naturalnych a kwadratem sumy.

Przypadki testowe

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

To wyzwanie zostało po raz pierwszy ogłoszone podczas projektu Euler # 6 .

Zwycięskie kryteria

  • Nie ma żadnych zasad dotyczących tego, jakie powinno być zachowanie z wejściem ujemnym lub zerowym.

  • Najkrótsza odpowiedź wygrywa.

Eduardo Hoefel
źródło
4
To wyzwanie wymaga zwycięskiego kryterium (np. Kod golfa)
dylnan
2
To jest część tego pytania
Cairair coinheringaahing
1
Czy sekwencję można indeksować 0? tj. liczby naturalne do n?
Jo King
3
@Enigma Naprawdę nie sądzę, że jest to duplikat celu, ponieważ wiele odpowiedzi tutaj nie daje się łatwo odpowiedzieć na to pytanie, więc to coś dodaje.
Jonathan Allan,

Odpowiedzi:

10

Galaretka ,  5  4 bajtów

Ḋ²ḋṖ

Wypróbuj online!

W jaki sposób?

Implementuje i=2n(i2(i1)) ...

Ḋ²ḋṖ - 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)
Jonathan Allan
źródło
8

Python 3 ,  28  27 bajtów

-1 dzięki xnor

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

Wypróbuj online!

Implementuje n(n1)(n+1)(3)n+2))/12


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

Jonathan Allan
źródło
1
Możesz ogolić bajt za pomocą n*~-n**2*lub (n**3-n)*.
xnor
8

APL (Dyalog Unicode) , 10 bajtów

1⊥⍳×⍳×1-⍨⍳

Wypróbuj online!

Jak to działa

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

Wykorzystuje fakt, że „kwadrat sumy” jest równy „sumie kostek”.

Bubbler
źródło
Dla mnie 1⊥⍳ × ⍳ × 1-⍨⍳ nie jest funkcją; Próbowałem 1⊥⍳ × ⍳ × 1-⍨⍳10 i dla mnie nie kompiluję ...
RosLuP
1
@RosLuP Najpierw musisz przypisać ją do zmiennej (tak jak to zrobiłem w linku TIO) lub zawinąć w parę nawiasów, jak (1⊥⍳×⍳×1-⍨⍳)10.
Bubbler,
7

TI-Basic (seria TI-83), 12 11 bajtów

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

Implementuje (n2)2))(12)+13)n). Bierze dane wejścioweAns: na przykład uruchom,10:prgmXaby obliczyć wynik dla danych wejściowych10.

Misza Ławrow
źródło
Niezłe wykorzystanie nCr!
Lynn,
6

Brain-Flak , 74 72 68 64 bajtów

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

Wypróbuj online!

Całkiem prosty sposób na zrobienie tego z kilkoma trudnymi zmianami. Mam nadzieję, że ktoś znajdzie więcej sztuczek, aby uczynić to jeszcze krótszym.

Post Rock Garf Hunter
źródło
5

Węgiel drzewny , 12 10 bajtów

IΣEN×ιX⊕ι²

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:(1nx)2)=1nx3) więc (1nx)2)-1nx2)=1n(x3)-x2))=1n(x-1)x2)=0n-1x(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
Neil
źródło
5

Perl 6 , 22 bajtów

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

Wypróbuj online!

Wykorzystuje konstrukcję ja=1n(ja2)(ja-1))

Jo King
źródło
4

Japt -x, 9 8 5 4 bajtów

õ²í*

Spróbuj


Wyjaśnienie

õ        :Range [1,input]
 ²       :Square each
  í      :Interleave with 0-based indices
   *     :Reduce each pair by multiplication
         :Implicit output of the sum of the resulting array
Kudłaty
źródło
3

APL (Dyalog), 17 bajtów

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

(Znacznie dłużej) Port galaretki Jonathana Allana.

Wypróbuj online!

Quintec
źródło
Idź milcząco i połącz krople:+/¯1↓⍳×1⌽⍳×⍳
Adám
3

APL (Dyalog) , 16 bajtów

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

Wypróbuj online!

 (×⍨+/)            The square  self) of the sum (+ fold)
       -           minus
        (+/×⍨)     the sum of the square
(             )⍳   of [1, 2,  input].
Lynn
źródło
(+/×⍨)1⊥×⍨według wskazówek .
Adám
1
Kolejny bajt można uratować, zachowując wnętrze(×⍨1⊥⍳)-⍳+.×⍳
Kritixi Lithos
3

Mathematica, 21 17 bajtów

-4 bajty dzięki 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.

LegionMammal978
źródło
(3#+2)(#^3-#)/12&
alephalpha
@alephalpha Thanks!
LegionMammal978
Można się tam dostać bez oceny wielomianu: #.(#^2-#)&@*Rangewdraża inne typowe rozwiązanie. (Ale to również 17 bajtów). I możemy realizować algorytm naiwny w 18 bajtów: Tr@#^2-#.#&@*Range.
Misza Ławrow
3

dc , 16 bajtów

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

Narzędzia (n3)-n)(3)n+2))/12

Wypróbuj online!

Cyfrowa trauma
źródło
3

05AB1E , 8 bajtów

ÝDOnsnO-

Wyjaśnienie:

Ý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)

Wypróbuj online!

Cowabunghole
źródło
LDnOsOn-była moją pierwszą próbą.
Magic Octopus Urn
3

C, C ++, 46 40 37 bajtów (# zdefiniować), 50 47 46 bajtów (funkcja)

-1 bajt dzięki Zacharý

-11 bajtów dzięki pułapkowi cat

Wersja makro:

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

Wersja funkcji:

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

Te linie oparte są na tych 2 formułach:

Suma liczb od 1 do n = n*(n+1)/2
Suma kwadratów od 1 do n =n*(n+1)*(2n+1)/6

Tak więc formuła uzyskania odpowiedzi jest prosta (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

A teraz, aby „zoptymalizować” liczbę bajtów, przerywamy nawiasy i przesuwamy różne elementy, a testowanie zawsze daje ten sam wynik

(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

Zwróć uwagę na wzorzec p = n*n+1 = n*n+n, dlatego w funkcji deklarujemy inną zmienną, int p = n*n+nktóra daje:

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

Do p*(p/4-(2*n+1)/6)i tak n*(n+1)*(n*(n+1)/4 - (2n+1)/6), to działa połowę czasu tylko i podejrzewam podział całkowitą być przyczyną ( f(3)co daje 24 zamiast 22, f(24)co daje 85200 zamiast 85100, więc nie możemy rozkładać na czynniki formuła makro w ten sposób, nawet jeśli matematycznie jest to samo.

Zarówno wersja makra, jak i wersja są dostępne z powodu podstawienia makra:

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

i zepsuć pierwszeństwo operatora. wersja funkcji nie ma tego problemu

HatsuPointerKun
źródło
1
Państwo mogłoby naprawić problem z makrami kosztem dużo bajtów poprzez zastąpienie wszystkich nz (n). Ponadto F(n) n=> F(n)nniezależnie.
Zacharý
Jest to możliwe, aby zmienić return p*p/4-p*(n-~n)/6się return(p/4-(n-~n)/6)*p.
Zacharý
@ Zacharý Nie, daje to złe wyniki, takie jak 24 zamiast 22 dla wejścia „3” lub 85200 zamiast 85100 dla wejścia „24”. Podejrzewam, że przyczyną tego był podział liczb całkowitych
HatsuPointerKun
Ugh, zawsze o tym zapominaj.
Zacharý
2

Pyth, 7 bajtów

sm**hdh

Wypróbuj online tutaj .

Wykorzystuje wzór z odpowiedzi Neila .

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 
Sok
źródło
2

05AB1E , 6 bajtów

LnDƶαO

Wypróbuj online!

Wyjaśnienie

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

Niektóre inne wersje o tej samej liczbie bajtów:

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

Emigna
źródło
2

R , 28 bajtów

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

Wypróbuj online!

Sumner18
źródło
3
sum(x<-1:scan())^2-sum(x^2)dla -1
J.Doe
2

MathGolf , 6 bajtów

{î²ï*+

Wypróbuj online!

Oblicza k=1n(k2)(k-1))

Wyjaśnienie:

{       Loop (implicit) input times
 î²     1-index of loop squared
    *   Multiplied by
   ï    The 0-index of the loop
     +  And add to the running total
Jo King
źródło
2

Clojure , 58 bajtów

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

Wypróbuj online!


Edycja: źle zrozumiałem pytanie

Clojure , 55 , 35 bajtów

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

Wypróbuj online!

TheGreatGeek
źródło
1
Dzięki za naprawienie tego. I tylko jedna wiadomość dotycząca twojego ostatniego wpisu (apply +jest krótsza niż (reduce +.
Carcigenicate
@Carcigenicate Thanks!
TheGreatGeek
1
Czy możesz edytować link bezpośredni, aby uruchomić jeden z przypadków testowych? W tej chwili nie pomagam ludziom, którzy nie znają Clojure.
Dennis,
2

cQuents , 17 15 bajtów

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

Wypróbuj online!

Wyjaśnienie

 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
Stephen
źródło
1

APL (NARS), 13 znaków, 26 bajtów

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

użyj wzoru Sum'w = 1..n '(w w (w-1)) możliwe, napisałem to samo, inne napisałem + lub - jako „1⊥⍳ × ⍳ × ⍳-1”; test:

  g←{+/⍵×⍵×⍵-1}∘⍳
  g 0
0
  g 1
0
  g 2
4
  g 3
22
  g 10
2640
RosLuP
źródło
1

QBASIC, 45 44 bajtów

Czysta matematyka oszczędza 1 bajt!

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

Wypróbuj TO online!


Poprzednia odpowiedź oparta na pętli

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

Wypróbuj online!

Zauważ, że REPL jest nieco bardziej rozbudowany, ponieważ inaczej interpreter zawiedzie.

Steenbergh
źródło
1

JAEL , 13 10 bajtów

#&àĝ&oȦ

Wypróbuj online!

Objaśnienie (generowane automatycznie):

./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
Eduardo Hoefel
źródło
1

05AB1E , 6 bajtów

LDOšnÆ

Wypróbuj online!

Wyjaśnienie:

           # 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

Ænie jest użyteczne często, ale nadszedł czas, aby zabłysnąć. To bije naiwność LOnILnO-o dwa całe bajty.

Ponury
źródło