Suma kwadratów pierwszych dziesięciu liczb naturalnych wynosi:
Kwadrat sumy pierwszych dziesięciu liczb naturalnych to:
Stąd różnica między sumą kwadratów pierwszych dziesięciu liczb naturalnych a kwadratem sumy wynosi
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.
n
?Odpowiedzi:
Galaretka ,
54 bajtówWypróbuj online!
W jaki sposób?
Implementuje∑ni=2(i2(i−1)) ...
źródło
Python 3 ,
2827 bajtów-1 dzięki xnor
Wypróbuj online!
Implementujen ( n - 1 ) ( n + 1 ) ( 3 n + 2)/12
Python 2,
2928 bajtów:lambda n:(n**3-n)*(3*n+2)/12
źródło
n*~-n**2*
lub(n**3-n)*
.APL (Dyalog Unicode) , 10 bajtów
Wypróbuj online!
Jak to działa
Wykorzystuje fakt, że „kwadrat sumy” jest równy „sumie kostek”.
źródło
(1⊥⍳×⍳×1-⍨⍳)10
.TI-Basic (seria TI-83),
1211 bajtówImplementuje( n2)2)) (12)+ 13 n) . Bierze dane wejściowe
Ans
: na przykład uruchom,10:prgmX
aby obliczyć wynik dla danych wejściowych10
.źródło
nCr
!Brain-Flak ,
74726864 bajtówWypró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.
źródło
Węgiel drzewny ,
1210 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:( ∑n1x )2)= ∑n1x3) więc ( ∑n1x )2)- ∑n1x2)= ∑n1( x3)- x2)) = ∑n1( x - 1 ) x2)= ∑n - 10x ( x + 1 )2) .
źródło
Perl 6 , 22 bajtów
Wypróbuj online!
Wykorzystuje konstrukcję∑ni = 1( i2)( i - 1 ) )
źródło
Japt
-x
,9854 bajtówSpróbuj
Wyjaśnienie
źródło
JavaScript, 20 bajtów
Wypróbuj online
źródło
APL (Dyalog), 17 bajtów
(Znacznie dłużej) Port galaretki Jonathana Allana.
Wypróbuj online!
źródło
+/¯1↓⍳×1⌽⍳×⍳
APL (Dyalog) , 16 bajtów
Wypróbuj online!
źródło
(+/×⍨)
→1⊥×⍨
według wskazówek .⍳
wnętrze(×⍨1⊥⍳)-⍳+.×⍳
Mathematica,
2117 bajtów-4 bajty dzięki alephalpha .
Pure function. Takes an integer as input and returns an integer as output. Just implements the polynomial, since
Sum
s,Range
s,Tr
s, etc. take up a lot of bytes.źródło
(3#+2)(#^3-#)/12&
#.(#^2-#)&@*Range
wdraż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
.Java (JDK) , 23 bajty
Wypróbuj online!
źródło
dc , 16 bajtów
Narzędzia( n3)- n ) ( 3 n + 2 ) / 12
Wypróbuj online!
źródło
05AB1E , 8 bajtów
Wyjaśnienie:
Wypróbuj online!
źródło
LDnOsOn-
była moją pierwszą próbą.C, C ++,
464037 bajtów (# zdefiniować),504746 bajtów (funkcja)-1 bajt dzięki Zacharý
-11 bajtów dzięki pułapkowi cat
Wersja makro:
Wersja funkcji:
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+n
która daje:p*p/4 - p*(2n+1)/6
Do
p*(p/4-(2*n+1)/6)
i takn*(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) daje
5-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
źródło
n
z(n)
. PonadtoF(n) n
=>F(n)n
niezależnie.return p*p/4-p*(n-~n)/6
sięreturn(p/4-(n-~n)/6)*p
.JavaScript (ES6), 22 bajty
Wypróbuj online!
źródło
Pyth, 7 bajtów
Wypróbuj online tutaj .
Wykorzystuje wzór z odpowiedzi Neila .
źródło
SNOBOL4 (CSNOBOL4) ,
7069 bajtówWypróbuj online!
źródło
Pari / GP , 21 bajtów
Wypróbuj online!
źródło
05AB1E , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Niektóre inne wersje o tej samej liczbie bajtów:
L<ān*O
Ln.āPO
L¦nā*O
źródło
R , 28 bajtów
Wypróbuj online!
źródło
sum(x<-1:scan())^2-sum(x^2)
dla -1MathGolf , 6 bajtów
Wypróbuj online!
Oblicza∑nk = 1( k2)( k - 1 ) )
Wyjaśnienie:
źródło
Clojure , 58 bajtówWypróbuj online!
Edycja: źle zrozumiałem pytanie
Clojure ,
55, 35 bajtówWypróbuj online!
źródło
(apply +
jest krótsza niż(reduce +
.cQuents ,
1715 bajtówWypróbuj online!
Wyjaśnienie
źródło
APL (NARS), 13 znaków, 26 bajtów
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:
źródło
Stax , 4 bajty
Uruchom i debuguj
Dla wszystkich dodatnich
k
liczb całkowitych aż do wejścia dodajk^2 * (k-1)
.źródło
QBASIC,
4544 bajtówCzysta matematyka oszczędza 1 bajt!
Wypróbuj TO online!
Poprzednia odpowiedź oparta na pętli
Wypróbuj online!
Zauważ, że REPL jest nieco bardziej rozbudowany, ponieważ inaczej interpreter zawiedzie.
źródło
JAEL ,
1310 bajtówWypróbuj online!
Objaśnienie (generowane automatycznie):
źródło
05AB1E , 6 bajtów
Wypróbuj online!
Wyjaśnienie:
Æ
nie jest użyteczne często, ale nadszedł czas, aby zabłysnąć. To bije naiwnośćLOnILnO-
o dwa całe bajty.źródło