Différence de somme des carrés

15

La somme des carrés des dix premiers nombres naturels est, 12+22++dix2=385

Le carré de la somme des dix premiers nombres naturels est,

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

Par conséquent, la différence entre la somme des carrés des dix premiers nombres naturels et le carré de la somme est

3025385=2640

Pour une entrée n donnée, trouvez la différence entre la somme des carrés des n premiers nombres naturels et le carré de la somme.

Cas de test

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

Ce défi a été annoncé pour la première fois lors du projet Euler # 6 .

Critères gagnants

  • Il n'y a pas de règles sur ce que devrait être le comportement avec une entrée négative ou nulle.

  • La réponse la plus courte l'emporte.

Eduardo Hoefel
la source
4
Ce défi nécessite un critère gagnant (par exemple, le golf de code)
dylnan
2
Ceci est un sous-ensemble de cette question
caird coinheringaahing
1
La séquence peut-elle être indexée 0? c'est-à-dire les nombres naturels jusqu'à n?
Jo King
3
@Enigma Je ne pense vraiment pas que ce soit un doublon de la cible car de nombreuses réponses ici ne sont pas faciles à porter pour être des réponses à cela, donc cela ajoute quelque chose.
Jonathan Allan

Réponses:

10

Gelée ,  5  4 octets

Ḋ²ḋṖ

Essayez-le en ligne!

Comment?

i=2n(i2(i1)) œuvre n i = 2 ( 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)
Jonathan Allan
la source
8

Python 3 ,  28  27 octets

-1 grâce à xnor

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

Essayez-le en ligne!

Met en œuvre n(n1)(n+1)(3n+2)/12


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

Jonathan Allan
la source
1
Vous pouvez raser un octet avec n*~-n**2*ou (n**3-n)*.
xnor
8

APL (Dyalog Unicode) , 10 octets

1⊥⍳×⍳×1-⍨⍳

Essayez-le en ligne!

Comment ça fonctionne

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

Utilise le fait que "carré de somme" est égal à "somme de cubes".

Bubbler
la source
Pour moi, 1⊥⍳ × ⍳ × 1-⍨⍳ n'est pas une fonction; J'ai essayé 1⊥⍳ × ⍳ × 1-⍨⍳10 et pour moi pas compilé ...
RosLuP
1
@RosLuP Vous devez d'abord l'assigner à une variable (comme je l'ai fait dans le lien TIO) ou l'envelopper dans une paire de parenthèses, comme (1⊥⍳×⍳×1-⍨⍳)10.
Bubbler
7

TI-Basic (série TI-83), 12 11 octets

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

Instruments (n22)(12+13n). Prend l'entréeAns: par exemple, exécutez10:prgmXpour calculer le résultat pour l'entrée10.

Misha Lavrov
la source
Bonne utilisation de nCr!
Lynn
6

Brain-Flak , 74 72 68 64 octets

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

Essayez-le en ligne!

Un moyen assez simple de le faire avec quelques changements délicats. J'espère que quelqu'un trouvera d'autres astuces pour raccourcir la durée.

Post Rock Garf Hunter
la source
5

Fusain , 12 10 octets

IΣEN×ιX⊕ι²

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication: (1nX)2=1nX3 donc (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
la source
4

Japt -x, 9 8 5 4 octets

õ²í*

Essayez-le


Explication

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

APL (Dyalog), 17 octets

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

(Beaucoup plus long) Réponse de Jelly du Port de Jonathan Allan.

Essayez-le en ligne!

Quintec
la source
Allez tacite et combinez les gouttes:+/¯1↓⍳×1⌽⍳×⍳
Adám
3

APL (Dyalog) , 16 octets

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

Essayez-le en ligne!

 (×⍨+/)            The square  self) of the sum (+ fold)
       -           minus
        (+/×⍨)     the sum of the square
(             )⍳   of [1, 2,  input].
Lynn
la source
(+/×⍨)1⊥×⍨selon la pointe .
Adám
1
Un octet supplémentaire pourrait être sauvé en gardant l' intérieur(×⍨1⊥⍳)-⍳+.×⍳
Kritixi Lithos
3

Mathematica, 21 17 octets

-4 octets grâce à alephalpha .

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

Fonction pure. Prend un entier en entrée et renvoie un entier en sortie. Implémente simplement le polynôme, car Sums, Ranges, Trs, etc. prennent beaucoup d'octets.

LegionMammal978
la source
(3#+2)(#^3-#)/12&
alephalpha
@alephalpha Merci!
LegionMammal978
Il est possible d'y arriver sans simplement évaluer le polynôme: #.(#^2-#)&@*Rangeimplémente une autre solution courante. (Mais il est aussi 17 octets). Et nous pouvons mettre en œuvre l'algorithme naïf dans 18 octets: Tr@#^2-#.#&@*Range.
Misha Lavrov
3

dc , 16 octets

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

(n3-n)(3n+2)/12

Essayez-le en ligne!

Traumatisme numérique
la source
3

05AB1E , 8 octets

ÝDOnsnO-

Explication:

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

Essayez-le en ligne!

Cowabunghole
la source
LDnOsOn-était ma première tentative aussi.
Urne de poulpe magique
3

C, C ++, 46 40 37 octets (#define), 50 47 46 octets (fonction)

-1 octet grâce à Zacharý

-11 octets grâce au plafond

Version macro:

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

Version de fonction:

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

Ces lignes sont basées sur ces 2 formules:

Somme des nombres entre 1 et n = n*(n+1)/2
Somme des carrés entre 1 et n =n*(n+1)*(2n+1)/6

Donc, la formule pour obtenir la réponse est simplement (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

Et maintenant, pour "optimiser" le nombre d'octets, nous cassons les parenthèses et déplaçons les choses, tout en le testant donne toujours le même résultat

(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

Remarquez le modèle p = n*n+1 = n*n+n, donc dans la fonction, nous déclarons une autre variable int p = n*n+net elle donne:

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

Pour p*(p/4-(2*n+1)/6)et ainsi n*(n+1)*(n*(n+1)/4 - (2n+1)/6), cela fonctionne seulement la moitié du temps, et je soupçonne que la division entière est la cause ( f(3)donnant 24 au lieu de 22, f(24)donnant 85200 au lieu de 85100, donc nous ne pouvons pas factoriser la formule de la macro de cette façon, même si mathématiquement c'est le même.

La version macro et la fonction sont ici en raison de la substitution de macro:

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

et gâcher la priorité de l'opérateur. la version de la fonction n'a pas ce problème

HatsuPointerKun
la source
1
Vous pouvez résoudre le problème avec les macros au prix de BEAUCOUP d'octets en remplaçant tous les npar (n). Aussi, F(n) n=> F(n)npeu importe.
Zacharý
Il est possible de réorganiser return p*p/4-p*(n-~n)/6à return(p/4-(n-~n)/6)*p.
Zacharý
@ Zacharý Non, cela me donne parfois de mauvais résultats comme 24 au lieu de 22 pour l'entrée "3", ou 85200 au lieu de 85100 pour l'entrée "24". Je soupçonne que la division entière est la cause de cela
HatsuPointerKun
Ugh, oublie toujours ça.
Zacharý
2

Pyth, 7 octets

sm**hdh

Essayez-le en ligne ici .

Utilise la formule dans la réponse de 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 
Sok
la source
2

05AB1E , 6 octets

LnDƶαO

Essayez-le en ligne!

Explication

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

Quelques autres versions avec le même nombre d'octets:

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

Emigna
la source
2

R , 28 octets

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

Essayez-le en ligne!

Sumner18
la source
3
sum(x<-1:scan())^2-sum(x^2)pour -1
J.Doe
2

MathGolf , 6 octets

{î²ï*+

Essayez-le en ligne!

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

Explication:

{       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
la source
2

Clojure , 58 octets

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

Essayez-le en ligne!


Edit: j'ai mal compris la question

Clojure , 55 , 35 octets

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

Essayez-le en ligne!

TheGreatGeek
la source
1
Merci d'avoir corrigé ça. Et juste un avertissement concernant votre dernière entrée, (apply +est plus court que (reduce +.
Carcigenicate
@Carcigenicate Merci!
TheGreatGeek
1
Pourriez-vous modifier votre permalien pour exécuter l'un des cas de test? En l'état, je n'aide pas les gens qui ne connaissent pas Clojure.
Dennis
2

cQuents , 17 15 octets

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

Essayez-le en ligne!

Explication

 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
la source
1

APL (NARS), 13 caractères, 26 octets

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

utiliser la formule Sum'w = 1..n '(w w (w-1)) possible j'ai écrit la même chose un autre a écrit + ou - comme "1⊥⍳ × ⍳ × ⍳-1"; tester:

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

QBASIC, 45 44 octets

Aller en mathématiques pures économise 1 octet!

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

Essayez-le en ligne!


Réponse précédente, basée sur une boucle

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

Essayez-le en ligne!

Notez que le REPL est un peu plus développé car l'interpréteur échoue sinon.

steenbergh
la source
1

JAEL , 13 10 octets

#&àĝ&oȦ

Essayez-le en ligne!

Explication (générée automatiquement):

./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
la source
1

05AB1E , 6 octets

LDOšnÆ

Essayez-le en ligne!

Explication:

           # 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

Æn'est pas utile souvent, mais c'est le moment de briller. Cela bat le naïf LOnILnO-de deux octets entiers.

Grimmy
la source