Somma differenza quadrata


15

La somma dei quadrati dei primi dieci numeri naturali è, 12+22++102=385

Il quadrato della somma dei primi dieci numeri naturali è,

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

Quindi la differenza tra la somma dei quadrati dei primi dieci numeri naturali e il quadrato della somma è

3025385=2640

Per un dato input n, trova la differenza tra la somma dei quadrati dei primi n numeri naturali e il quadrato della somma.

Casi test

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

Questa sfida è stata annunciata per la prima volta al Progetto Euler n . 6 .

Criteri vincenti

  • Non ci sono regole su quale dovrebbe essere il comportamento con input negativo o zero.

  • Vince la risposta più breve.


4
Questa sfida ha bisogno di un criterio vincente (es. Codice golf)
dylnan,

2
Questo è un sottoinsieme di questa domanda
caird coinheringaahing

1
La sequenza può essere indicizzata 0? cioè i numeri naturali fino a n?
Jo King,


3
@Enigma Non credo davvero che questo sia un duplicato del target poiché molte risposte qui non portano facilmente a essere risposte di ciò, quindi questo aggiunge qualcosa.
Jonathan Allan,

Risposte:


10

Gelatina ,  5  4 byte

Ḋ²ḋṖ

Provalo online!

Come?

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


8

APL (Dyalog Unicode) , 10 byte

1⊥⍳×⍳×1-⍨⍳

Provalo online!

Come funziona

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

Usa il fatto che "quadrato di somma" è uguale a "somma di cubi".


Per me 1⊥⍳ × ⍳ × 1-⍨⍳ non è una funzione; Ho provato 1⊥⍳ × ⍳ × 1-⍨⍳10 e per me non compilare ...
RosLuP

1
@RosLuP Devi prima assegnarlo a una variabile (come ho fatto nel collegamento TIO) o racchiuderlo tra parentesi, come (1⊥⍳×⍳×1-⍨⍳)10.
Bubbler

7

TI-Basic (serie TI-83), 12 11 byte

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

Strumenti (n22)(12+13n). Accetta inputAns: ad esempio, esegui10:prgmXper calcolare il risultato per l'input10.


Bel uso di nCr!
Lynn,

6

Brain-Flak , 74 72 68 64 byte

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

Provalo online!

Modo abbastanza semplice per farlo con un paio di turni difficili. Spero che qualcuno troverà qualche altro trucco per renderlo ancora più breve.


5

Carbone , 12 10 byte

IΣEN×ιX⊕ι²

(Σ1nX)2=Σ1nX3(Σ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 byte

õ²í*

Provalo


Spiegazione

õ        :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 byte

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

(Molto più a lungo) La risposta della gelatina di Port of Jonathan Allan.

Provalo online!


Vai tacito e combina le gocce:+/¯1↓⍳×1⌽⍳×⍳
Adám,


3

Mathematica, 21 17 byte

-4 byte grazie ad alephalpha .

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

Funzione pura. Accetta un numero intero come input e restituisce un numero intero come output. Implementa solo il polinomio, poiché Sums, Ranges, Trs, ecc. Occupano molti byte.



@alephalpha Grazie!
LegionMammal978,

È possibile arrivarci senza semplicemente valutare il polinomio: #.(#^2-#)&@*Rangeimplementa un'altra soluzione comune. (Ma è anche 17 byte). E siamo in grado di implementare l'algoritmo ingenuo in 18 byte: Tr@#^2-#.#&@*Range.
Misha Lavrov,



3

05AB1E , 8 byte

ÝDOnsnO-

Spiegazione:

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

Provalo online!


LDnOsOn-è stato anche il mio primo tentativo.
Magic Octopus Urn

3

C, C ++, 46 40 37 byte (#define), 50 47 46 byte (funzione)

-1 byte grazie a Zacharý

-11 byte grazie a ceilingcat

Versione macro:

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

Versione di funzione:

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

Queste linee si basano su queste 2 formule:

Somma di numeri tra 1 e n = n*(n+1)/2
Somma di quadrati tra 1 e n =n*(n+1)*(2n+1)/6

Quindi la formula per ottenere la risposta è semplicemente (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

E ora per "ottimizzare" il conteggio dei byte, interrompiamo le parentesi e spostiamo le cose, mentre testarle dà sempre lo stesso risultato

(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

Nota il modello p = n*n+1 = n*n+n, quindi nella funzione dichiariamo un'altra variabile int p = n*n+ne dà:

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

Per p*(p/4-(2*n+1)/6)così n*(n+1)*(n*(n+1)/4 - (2n+1)/6), funziona solo la metà del tempo, e sospetto che la divisione intera sia la causa ( f(3)dando 24 invece di 22, f(24)dando 85200 anziché 85100, quindi non possiamo fattorizzare la formula della macro in quel modo, anche se matematicamente lo è lo stesso.

Sia la versione macro che la funzione sono qui a causa della sostituzione della macro:

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

e sbagliare con la precedenza dell'operatore. la versione della funzione non presenta questo problema


1
È possibile risolvere il problema con le macro al costo di MOLTI byte sostituendo tutto ncon (n). Inoltre, F(n) n=> F(n)nindipendentemente.
Zacharý,

E 'possibile riorganizzare return p*p/4-p*(n-~n)/6a return(p/4-(n-~n)/6)*p.
Zacharý,

@ Zacharý No, a volte mi danno risultati negativi come 24 invece di 22 per l'ingresso "3", o 85200 anziché 85100 per l'ingresso "24". Sospetto che la causa sia la divisione intera
HatsuPointerKun,

Ugh, dimenticalo sempre.
Zacharý,


2

Pyth, 7 byte

sm**hdh

Provalo online qui .

Usa la formula nella risposta di Neil .

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 byte

LnDƶαO

Provalo online!

Spiegazione

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

Alcune altre versioni con lo stesso numero di byte:

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



2

MathGolf , 6 byte

{î²ï*+

Provalo online!

Calcola ΣK=1n(K2(K-1))

Spiegazione:

{       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 byte

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

Provalo online!


Modifica: ho frainteso la domanda

Clojure , 55 , 35 byte

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

Provalo online!


1
Grazie per averlo risolto. E solo un avvertimento per quanto riguarda la tua ultima voce, (apply +è più breve di (reduce +.
Carcigenicato il

@Carcigenicate Grazie!
TheGreatGeek,

1
Potresti modificare il tuo permalink per eseguire uno dei casi di test? Così com'è, non aiuto le persone che non conoscono Clojure.
Dennis,

2

cQuents , 17 15 byte

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

Provalo online!

Spiegazione

 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 caratteri, 26 byte

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

usa la formula Sum'w = 1..n '(w w (w-1)) possibile ho scritto lo stesso un altro scritto + o - come "1⊥⍳ × ⍳ × ⍳-1"; test:

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


1

QBASIC, 45 44 byte

La matematica pura fa risparmiare 1 byte!

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

Provalo online!


Risposta precedente basata su loop

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

Provalo online!

Si noti che il REPL è un po 'più espanso perché altrimenti l'interprete non riesce.


1

JAEL , 13 10 byte

#&àĝ&oȦ

Provalo online!

Spiegazione (generata automaticamente):

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

LDOšnÆ

Provalo online!

Spiegazione:

           # 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

Ænon è utile spesso, ma questo è il momento di brillare. Questo batte l'ingenuo LOnILnO-di due interi byte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.