Tổng bình phương chênh lệch


15

Tổng bình phương của mười số tự nhiên đầu tiên là, 12+22++102=385

Bình phương tổng của mười số tự nhiên đầu tiên là,

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

Do đó, sự khác biệt giữa tổng bình phương của mười số tự nhiên đầu tiên và bình phương của tổng là

3025385=2640

Đối với một đầu vào n đã cho, tìm sự khác biệt giữa tổng bình phương của n số tự nhiên đầu tiên và bình phương của tổng.

Các trường hợp thử nghiệm

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

Thử thách này lần đầu tiên được công bố tại Project Euler # 6 .

Tiêu chí chiến thắng

  • Không có quy tắc về những gì nên là hành vi với đầu vào tiêu cực hoặc bằng không.

  • Câu trả lời ngắn nhất sẽ thắng.


4
Thử thách này cần một tiêu chí chiến thắng (ví dụ: golf mã)
dylnan

2
Đây là một tập hợp con của câu hỏi này
caird coinheringaahing

1
Trình tự có thể được lập chỉ mục 0? tức là số tự nhiên lên đến n?
Jo King


3
@Enigma Tôi thực sự không nghĩ rằng đây là một bản sao của mục tiêu vì nhiều câu trả lời ở đây không dễ dàng trở thành câu trả lời cho điều đó, vì vậy điều này thêm vào một cái gì đó.
Jonathan Allan

Câu trả lời:


10

Thạch ,  5  4 byte

Ḋ²ḋṖ

Hãy thử trực tuyến!

Làm sao?

Dụng cụ 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-⍨⍳

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

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

Sử dụng thực tế là "bình phương tổng" bằng "tổng khối".


Đối với tôi 1⊥⍳ × × 1-không phải là một hàm; Tôi đã thử 1⊥⍳ × × 1-⍨⍳10 và đối với tôi không biên dịch ...
RosLuP

1
@RosLuP Bạn phải gán nó cho một biến trước tiên (như tôi đã làm trong liên kết TIO) hoặc bọc nó trong một cặp dấu ngoặc đơn, như (1⊥⍳×⍳×1-⍨⍳)10.
Bong bóng

7

TI-Basic (sê-ri TI-83), 12 11 byte

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

Thực hiện (n22)(12+13n). Đưa đầu vào vàoAns: ví dụ: chạy10:prgmXđể tính kết quả cho đầu vào10.


Sử dụng tốt đẹp nCr!
Lynn

6

Brain-Flak , 74 72 68 64 byte

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

Hãy thử trực tuyến!

Cách làm khá đơn giản với một vài thay đổi khó khăn. Hy vọng ai đó sẽ tìm thấy một số thủ thuật để làm cho điều này thậm chí còn ngắn hơn.


5

Than , 12 10 byte

IΣEN×ιX⊕ι²

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải thích: (Σ1nx)2= =Σ1nx3 nên (Σ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

õ²í*

Thử nó


Giải trình

õ        :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↓×⍨⍵}⍳

(Lâu hơn nữa) Câu trả lời của Jonathan Jonathan Allan.

Hãy thử trực tuyến!


Đi ngầm và kết hợp các giọt:+/¯1↓⍳×1⌽⍳×⍳
Adám


3

Toán học, 21 17 byte

-4 byte nhờ alephalpha .

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

Chức năng thuần túy. Lấy một số nguyên làm đầu vào và trả về một số nguyên làm đầu ra. Chỉ cần thực hiện đa thức, vì Sums, Ranges, Trs, v.v ... chiếm rất nhiều byte.



@alephalpha Cảm ơn!
LegionMammal978

Có thể đến đó mà không cần đánh giá đa thức: #.(#^2-#)&@*Rangethực hiện một giải pháp phổ biến khác. (Nhưng nó cũng có 17 byte.) Và chúng ta có thể thực hiện thuật toán ngây thơ trong 18 byte : Tr@#^2-#.#&@*Range.
Misha Lavrov



3

05AB1E , 8 byte

ÝDOnsnO-

Giải trình:

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

Hãy thử trực tuyến!


LDnOsOn-là nỗ lực đầu tiên của tôi quá.
Bạch tuộc ma thuật Urn

3

C, C ++, 46 40 37 byte (#define), 50 47 46 byte (chức năng)

-1 byte nhờ Zacharý

-11 byte nhờ trần

Phiên bản macro:

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

Phiên bản chức năng:

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

Các dòng của Thoses dựa trên 2 công thức:

Tổng các số từ 1 đến n = n*(n+1)/2
Tổng bình phương từ 1 đến n =n*(n+1)*(2n+1)/6

Vì vậy, công thức để có được câu trả lời chỉ đơn giản là (n*(n+1)/2) * (n*(n+1)/2) - n*(n+1)*(2n+1)/6

Và bây giờ để "tối ưu hóa" số byte, chúng tôi phá vỡ dấu ngoặc đơn và di chuyển các thứ xung quanh, trong khi kiểm tra nó luôn cho kết quả tương tự

(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

Lưu ý mẫu p = n*n+1 = n*n+n, vì vậy trong hàm, chúng ta khai báo một biến khác int p = n*n+nvà nó đưa ra:

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

p*(p/4-(2*n+1)/6)vậy n*(n+1)*(n*(n+1)/4 - (2n+1)/6), nó chỉ hoạt động được một nửa thời gian và tôi nghi ngờ sự phân chia số nguyên là nguyên nhân ( f(3)đưa ra 24 thay vì 22, f(24)cho 85200 thay vì 85100, vì vậy chúng ta không thể xác định công thức của macro theo cách đó, ngay cả khi về mặt toán học giống nhau.

Cả phiên bản macro và chức năng đều ở đây vì thay thế macro:

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

và gây rối với các nhà điều hành ưu tiên. phiên bản chức năng không có vấn đề này


1
Bạn có thể khắc phục sự cố với các macro với chi phí RẤT NHIỀU byte bằng cách thay thế tất cả nbằng (n). Ngoài ra, F(n) n=> F(n)nbất kể.
Zacharý

Có thể sắp xếp lại return p*p/4-p*(n-~n)/6để return(p/4-(n-~n)/6)*p.
Zacharý

@ Zacharý Không, nó mang lại cho tôi kết quả tồi tệ đôi khi như 24 thay vì 22 cho đầu vào "3" hoặc 85200 thay vì 85100 cho đầu vào "24". Tôi nghi ngờ sự phân chia số nguyên là nguyên nhân của điều đó
HatsuPulumKun

Ugh, luôn quên điều đó.
Zacharý


2

Bình thường, 7 byte

sm**hdh

Hãy thử trực tuyến tại đây .

Sử dụng công thức trong câu trả lời của 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

Hãy thử trực tuyến!

Giải trình

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

Một số phiên bản khác có cùng số byte:

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



2

MathGolf , 6 byte

{î²ï*+

Hãy thử trực tuyến!

Tính toán Σk= =1n(k2(k-1))

Giải trình:

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

Hãy thử trực tuyến!


Chỉnh sửa: Tôi hiểu nhầm câu hỏi

Clojure , 55 , 35 byte

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

Hãy thử trực tuyến!


1
Cảm ơn đã sửa nó. Và chỉ cần một đầu lên về mục cuối cùng của bạn, (apply +là ngắn hơn (reduce +.
Carcigenicate

@Carcigenicate Cảm ơn!
TheGreatGeek

1
Bạn có thể chỉnh sửa permalink của bạn để chạy một trong các trường hợp thử nghiệm không? Vì vậy, tôi không giúp những người không biết Clojure.
Dennis

2

Câu hỏi , 17 15 byte

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

Hãy thử trực tuyến!

Giải trình

 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 ký tự, 26 byte

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

sử dụng công thức Sum'w = 1..n '(w w (w-1)) có thể tôi đã viết tương tự một số khác đã viết + hoặc - là "1⊥⍳ × × ⍳-1"; kiểm tra:

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


1

QBASIC, 45 44 byte

Đi toán học thuần túy tiết kiệm 1 byte!

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

Hãy thử THAT trực tuyến!


Trước đây, câu trả lời dựa trên vòng lặp

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

Hãy thử trực tuyến!

Lưu ý rằng REPL được mở rộng hơn một chút vì trình thông dịch không thành công.


1

JAEL , 13 10 byte

#&àĝ&oȦ

Hãy thử trực tuyến!

Giải thích (được tạo tự động):

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

Hãy thử trực tuyến!

Giải trình:

           # 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

Ækhông thường xuyên hữu ích, nhưng đây là lúc để tỏa sáng. Điều này đánh bại sự ngây thơ LOnILnO-của hai byte toàn bộ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.