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

3025−385=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.


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


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


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.


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.


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


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


3

APL (Dyalog), 17 bajtów

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

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

Wypróbuj online!


Idź milcząco i połącz krople:+/¯1↓⍳×1⌽⍳×⍳
— Adám


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.



@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

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!


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


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 



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



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

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!


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

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


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.


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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.