ผลต่างสแควร์ผลรวม


15

ผลรวมของกำลังสองของตัวเลขธรรมชาติสิบตัวแรกคือ 12+22++102=385

กำลังสองของผลรวมของจำนวนธรรมชาติสิบตัวแรกคือ,

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

ดังนั้นความแตกต่างระหว่างผลรวมของกำลังสองของจำนวนธรรมชาติสิบตัวแรกและกำลังสองของผลรวมคือ

3025385=2640

สำหรับอินพุตที่กำหนดให้ค้นหาความแตกต่างระหว่างผลรวมของกำลังสองของตัวเลขธรรมชาติ n แรกและกำลังสองของผลรวม

กรณีทดสอบ

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

ความท้าทายนี้เป็นครั้งแรกที่มีการประกาศที่โครงการออยเลอร์ # 6

เกณฑ์การชนะ

  • ไม่มีกฎเกี่ยวกับสิ่งที่ควรเป็นพฤติกรรมที่มีอินพุตเป็นลบหรือเป็นศูนย์

  • คำตอบที่สั้นที่สุดชนะ


4
ความท้าทายนี้ต้องใช้เกณฑ์ชนะ (เช่นการเล่นกอล์ฟ)
dylnan

2
นี่เป็นส่วนย่อยของคำถามนี้
caird coinheringaahing

1
สามารถเรียงลำดับดัชนีได้หรือไม่? เช่นจำนวนธรรมชาติถึงn?
Jo King

5
โปรดทราบว่ามันท้อแท้กับความท้าทายโพสต์โดยตรงจากที่อื่น
user202729

3
@Enigma ฉันไม่คิดว่านี่จะเป็นเป้าหมายที่ซ้ำกันเนื่องจากคำตอบมากมายที่นี่ไม่ได้เป็นคำตอบที่ง่ายดังนั้นการเพิ่มบางอย่าง
Jonathan Allan

คำตอบ:




8

APL (Dyalog Unicode)ขนาด 10 ไบต์

1⊥⍳×⍳×1-⍨⍳

ลองออนไลน์!

มันทำงานอย่างไร

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

ใช้ความจริงที่ว่า "กำลังสองของผลรวม" เท่ากับ "ผลรวมของลูกบาศก์"


สำหรับฉัน1⊥⍳×⍳× 1-⍨⍳ไม่ใช่ฟังก์ชั่น ฉันลอง1⊥⍳×⍳× 1-⍨⍳10และสำหรับฉันไม่ได้รวบรวม ...
RosLuP

1
@RosLuP คุณต้องกำหนดให้ตัวแปรแรก (ที่ผมทำในการเชื่อมโยง TIO) (1⊥⍳×⍳×1-⍨⍳)10หรือห่อมันไว้ภายในคู่ของวงเล็บเป็น
Bubbler

7

TI-Basic (TI-83 series), 12 11 ไบต์

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

การดำเนินการ(n22)(12+13n) ) จะเข้าในAns: ยกตัวอย่างเช่นเรียกใช้ในการคำนวณผลสำหรับการป้อนข้อมูล10:prgmX10


ใช้งานได้ดีnCr!
ลินน์

6

Brain-Flak , 74 72 68 64 ไบต์

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

ลองออนไลน์!

วิธีง่ายๆในการทำด้วยการเลื่อนหากินสองสามครั้ง หวังว่าบางคนจะได้พบกับเทคนิคเพิ่มเติมเพื่อทำให้เรื่องนี้สั้นลง


5

ถ่าน , 12 10 ไบต์

IΣEN×ιX⊕ι²

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย: (1nx)2=1nx3ดังนั้น(1nx)21nx2=1n(x3x2)=1n(x1)x2=0n1x(x+1)2 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






3

Mathematica, 21 17 ไบต์

-4 ไบต์ขอบคุณที่alephalpha

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

ฟังก์ชั่นบริสุทธิ์ รับจำนวนเต็มเป็นอินพุตและส่งคืนจำนวนเต็มเป็นเอาต์พุต เพียงใช้พหุนามเนื่องจากSums, Ranges, Trs เป็นต้นใช้เวลามากถึงไบต์



@alephalpha ขอบคุณ!
LegionMammal978

เป็นไปได้ที่จะไปถึงที่นั่นโดยไม่ต้องประเมินพหุนาม: #.(#^2-#)&@*Rangeใช้วิธีแก้ปัญหาร่วมกันอีกอย่าง ( แต่มันก็ยัง 17 ไบต์.) และเราสามารถดำเนินการตามขั้นตอนวิธีการที่ไร้เดียงสาใน 18 Tr@#^2-#.#&@*Rangeไบต์:
Misha Lavrov




3

C, C ++, 46 40 37 ไบต์ (#define), 50 47 46 ไบต์ (ฟังก์ชั่น)

-1 ไบต์ขอบคุณZacharý

-11 ไบต์ขอบคุณไปที่แมวป่า

เวอร์ชันมาโคร:

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

รุ่นฟังก์ชั่น:

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

เส้นที่อยู่บนพื้นฐานของสูตร 2 รายการ:

ผลรวมของตัวเลขระหว่าง 1 ถึง n = n*(n+1)/2
ผลรวมของกำลังสองระหว่าง 1 ถึง n =n*(n+1)*(2n+1)/6

สูตรที่จะได้คำตอบก็คือ (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)/2*n*(n+1)/2 - n*(n+1)*(2n+1)/6=> n*(n+1)*n*(n+1)/4 - n*(n+1)*(2n+1)/6

สังเกตรูปแบบp = n*n+1 = n*n+nดังนั้นในฟังก์ชั่นเราประกาศตัวแปรอื่นint p = n*n+nและให้:

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

สำหรับp*(p/4-(2*n+1)/6)และอื่น ๆn*(n+1)*(n*(n+1)/4 - (2n+1)/6)ก็ทำงานครึ่งเวลาเท่านั้นและผมแบ่งจำนวนเต็มผู้ต้องสงสัยที่จะเป็นสาเหตุ ( f(3)ให้ 24 แทน 22 f(24)ให้ 85,200 แทน 85100 ดังนั้นเราจึงไม่สามารถ Factorize สูตรแมโครของวิธีการที่แม้ว่าทางคณิตศาสตร์มันเป็น เหมือน.

ทั้งรุ่นแมโครและฟังก์ชันอยู่ที่นี่เนื่องจากการทดแทนแมโคร:

F (3) ให้3*3*(3+1)*(3+1)/4-3*(3+1)*(2*3+1)/6 = 22
F (5-2) ให้5-2*5-2*(5-2+1)*(5-2+1)/4-5-2*(5-2+1)*(2*5-2+1)/6 = -30

และสับสนกับลำดับความสำคัญของผู้ประกอบการ รุ่นฟังก์ชั่นไม่มีปัญหานี้


1
คุณสามารถแก้ไขปัญหาด้วยมาโครที่ค่าใช้จ่ายของจำนวนมากของไบต์โดยการแทนที่ทั้งหมดด้วยn (n)นอกจากนี้F(n) n=> F(n)nโดยไม่คำนึงถึง
Zacharý

มันเป็นไปได้ที่จะจัดเรียงไปreturn p*p/4-p*(n-~n)/6 return(p/4-(n-~n)/6)*p
Zacharý

@ Zacharýไม่ฉันให้ผลลัพธ์ที่ไม่ดีบางครั้งเช่น 24 แทน 22 สำหรับอินพุต "3" หรือ 85200 แทน 85100 สำหรับอินพุต "24" ฉันสงสัยว่าการหารจำนวนเต็มเป็นสาเหตุของสิ่งนั้น
HatsuPointerKun

ฮึลืมเรื่องนั้นเสมอ
Zacharý


2

Pyth, 7 ไบต์

sm**hdh

ลองออนไลน์ได้ที่นี่

ใช้สูตรในคำตอบของนีล

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 ไบต์

LnDƶαO

ลองออนไลน์!

คำอธิบาย

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

บางรุ่นอื่น ๆ ที่มีจำนวนไบต์เดียวกัน:

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




2

Clojure , 58 ไบต์

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

ลองออนไลน์!


แก้ไข: ฉันเข้าใจผิดคำถาม

Clojure , 55 , 35 ไบต์

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

ลองออนไลน์!


1
ขอบคุณสำหรับการแก้ไข และเพียงแค่หัวขึ้นเกี่ยวกับรายการสุดท้ายของคุณจะสั้นกว่า(apply + (reduce +
Carcigenicate

@Carcigenicate ขอบคุณ!
TheGreatGeek

1
คุณสามารถแก้ไขลิงก์เพื่อเรียกใช้กรณีทดสอบข้อใดข้อหนึ่งได้หรือไม่ ฉันไม่ได้ช่วยคนที่ไม่รู้จัก Clojure
Dennis


1

APL (NARS), 13 ตัวอักษร, 26 ไบต์

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

ใช้สูตร Sum'w = 1..n '(w w (w-1)) เป็นไปได้ที่ฉันเขียนเหมือนกันบางคนเขียน + หรือ - เป็น "1⊥⍳×⍳×⍳-1"; ทดสอบ:

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


1

QBASIC, 45 44 ไบต์

การใช้คณิตศาสตร์บริสุทธิ์ช่วยประหยัด 1 ไบต์!

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

ลองใช้งานออนไลน์!


ก่อนหน้านี้คำตอบแบบวนซ้ำ

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

ลองออนไลน์!

โปรดทราบว่า REPL นั้นขยายเพิ่มอีกเล็กน้อยเนื่องจากล่ามล้มเหลวเป็นอย่างอื่น


1

JAEL , 13 10 ไบต์

#&àĝ&oȦ

ลองออนไลน์!

คำอธิบาย (สร้างขึ้นโดยอัตโนมัติ):

./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 ไบต์

LDOšnÆ

ลองออนไลน์!

คำอธิบาย:

           # 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

Æไม่ได้มีประโยชน์บ่อยนัก แต่นี่เป็นเวลาที่จะส่องแสง นี่จะไร้เดียงสาLOnILnO-สองไบต์ทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.