กำหนดความสุดยอด


21

จำนวนล้นเหลือเป็นจำนวนเต็มnว่าชุดใหม่ที่ถูกผูกไว้บนสำหรับอัตราส่วนกับฟังก์ชั่นตัวหารผลรวม σ กล่าวอีกนัยหนึ่งnคือเหลือเฟือหากว่าสำหรับจำนวนเต็มบวกทั้งหมดxที่น้อยกว่าn :

σ(n)n>σ(x)x

สำหรับค่าบางอย่าง:

n   σ(n)   σ(n)/n   superabundant
1   1      1.0000   yes
2   3      1.5000   yes
3   4      1.3333   no
4   7      1.7500   yes
5   6      1.2000   no
6   12     2.0000   yes
7   8      1.1429   no
8   15     1.8750   no
9   13     1.4444   no

รายการยาวของเหล่านี้ (สำหรับกรณีทดสอบ) สามารถพบได้ที่OEIS A004394

กรณีทดสอบเชิงลบที่แนะนำอย่างหนึ่ง(หากล่ามของคุณสามารถจัดการได้) คือ 360360 เพราะมันจะเชื่อมโยงกับหมายเลขที่มากเกินไปสุดท้าย

ท้าทาย

โปรแกรมของคุณควรใช้จำนวนเต็มบวกเดียวและส่งออกค่าจริงหรือเท็จซึ่งแสดงว่าจำนวนเต็มนั้นมากเกินไป

เช่นนี้คือคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ

คำตอบ:


7

เยลลี่ขนาด 7 ไบต์

Æs÷$ÞṪ=

ลองออนไลน์!

เยลลี่ขนาด 8 ไบต์

Æs÷$ÐṀ⁼W

ลองออนไลน์!

ชุดทดสอบ!

คำอธิบาย

Æs÷ $ ÐṀ⁼W ~ โปรแกรมเต็มรูปแบบ (monadic)

    ÐṀ ~ รักษาองค์ประกอบด้วยค่าลิงค์สูงสุด (ปรับค่าอัตโนมัติ)
~s ~ ผลรวมของตัวหาร
  ÷ $ ~ หารด้วยองค์ประกอบปัจจุบัน
      ~W ~ ตรวจสอบความเท่าเทียมกันกับอินพุตที่ห่อไว้ในซิงเกิล
         ~ (สำหรับจำนวนเต็มเช่น 360360)

ฉันคิดว่าคุณสามารถทำได้Æs÷$ÐṀ=7 ไบต์ ฉันไม่ได้ตระหนักถึงการÐṀรังสรรค์ว่าเป็นประโยชน์ที่จะรู้
dylnan

@dylnan ไม่ฉันไม่สามารถ 360360แม้ว่ามันจะไม่สามารถทดสอบออนไลน์ก็ล้มเหลว อันที่จริงนี่เป็นรุ่นเริ่มต้นของฉัน
Mr. Xcoder

ทำไมถึงล้มเหลว360360?
dylnan

@dylnan 360360เป็นหมายเลขแรกที่มันจะล้มเหลว (ฉันคิดว่า) เพราะเป็นหมายเลขแรกที่ผูกผลลัพธ์ที่เกิดขึ้นก่อนหน้านี้ (และผลลัพธ์ของเราจะเป็น[0, 1])
Mr. Xcoder

@ Mr.Xcoder ฉันเห็นขอบคุณ
dylnan



4

อ็อกเทฟ 41 ไบต์

@(n)([~,p]=max((x=1:n)*~mod(x,x')./x))==n

ลองออนไลน์!

คำอธิบาย

@(n)                                       % Define anonymous function of n
                x=1:n                      % Range from 1 to n. Call that x
                        mod(x,x')          % n×n matrix of all pair-wise moduli
                       ~                   % Logical negate. True means it's a divisor
               (     )*                    % Matrix-multiply x times the above matrix
                                           % (gives the dot product of vector x times
                                           % each column of the matrix)
                                 ./x       % Divide each column by each entry in x
     [~,p]=max(                     )      % Index of first occurrence of maximum
    (                                )==n  % Does it equal n?

3

J , 35 ไบต์

ขอบคุณ Mr.Xcoder สำหรับการค้นหาปัญหาและเพื่อ cole สำหรับการแก้ไข!

[:([:*/{:>}:)@(%~>:@#.~/.~&.q:)1+i.

ลองออนไลน์!


1
สิ่งนี้ล้มเหลวสำหรับ360360(ดูความท้าทายสำหรับรายละเอียดเพิ่มเติม: กรณีทดสอบเชิงลบที่แนะนำอย่างหนึ่งคือ 360360 เนื่องจากสัมพันธ์กับหมายเลขที่มากเกินไปล่าสุด )
Mr. Xcoder

1
คงที่สำหรับ +3 ไบต์ ลองมันออนไลน์ ทำงานเกี่ยวกับการเล่นกอล์ฟ ฉันชอบการใช้งาน#.~จำนวนมาก (โดยสุจริตฟังก์ชั่นรวมตัวหารทั้งหมดนั้นดีจริงๆ) สิ่งที่ผิด btw คือแม้ว่าความคิดในการทำ{:=>./นั้นฉลาด แต่ก็ไม่ได้ตอบสนองส่วนที่ "มากกว่า" ของคำถาม
โคล

1
(1#.{:(]*0=|~)])\ นี่คือสิ่งที่ฉันมาด้วยที่จะเปลี่ยนฟังก์ชั่นซิกซึ่งเป็นที่มีความยาวเดียวกันขณะนี้: มีบางอย่างผิดปกติกับมันแม้ว่าคุณจะมีความคิดบางอย่าง?
โคล

1
@cole เครดิตสำหรับผลรวมของตัวหารฟังก์ชันไปที่ Roger Hui ในบทความนี้ ฉันยังเริ่มเขียนฟังก์ชันซิกม่าอีกอัน แต่หยุดทำงานหลังจากฉันไปถึง 9 ไบต์และตัดสินใจว่าจะไม่สั้นกว่าอันที่มีการแยกตัวประกอบเฉพาะ ขอบคุณสำหรับการแก้ไขปัญหา!
Galen Ivanov

@cole คำกริยาอื่นที่สั้นที่สุดสำหรับผลรวมของตัวหารที่ฉันพบคือ: (1#.]*0=|~)1+i.มันเป็นตะขอและไม่เข้าที่ได้ง่ายเหมือนกัน :)
Galen Ivanov

3

Julia 0.6 , 52 bytes

n->indmax(sum(x for x=1:m if m%x<1)//m for m=1:n)==n

ลองออนไลน์!

วิธีนี้ใช้ตัวเลขที่มีเหตุผลเพื่อให้แน่ใจว่าถูกต้องในกรณีที่เท่าเทียมกัน (การทดสอบ 360360 ใช้เวลาเกือบ 10 นาที)

การใช้จุดลอยตัวสามารถบันทึก 2 ไบต์ด้วยการแบ่งซ้าย:

n->indmax(m\sum(x for x=1:m if m%x<1)for m=1:n)==n

3

Pyth , 14 ไบต์

( FryAmTheEggmanบันทึกแล้ว 1 ไบต์)

qh.Mcs*M{yPZZS

ลองที่นี่! หรือดูกรณีทดสอบเพิ่มเติม

เพียงแค่ส่ง Pyth บังคับของฉันซึ่งน่าเล่นกอล์ฟได้มากที่สุด

อย่างไร?

qh.Mcs * M {yPZZS ~ โปรแกรมเต็มรูปแบบ Q = อินพุต

             S ~ จำนวนเต็มในช่วง [1, Q]
  .M ~ รับองค์ประกอบที่มีค่าฟังก์ชันสูงสุด
    cs * M {yPZZ ~ ฟังก์ชันหลัก: ใช้ตัวแปร Z
         yPZ ~ ขุมพลังของปัจจัยสำคัญของ Z
        {~ ซ้ำซ้อน
      * M ~ สินค้าของแต่ละคน
     s ~ และสรุป
    c Z ~ หารด้วย Z
 h ~ องค์ประกอบแรก
ตรวจสอบความเท่าเทียมกันกับอินพุต ส่งออกทั้งจริงหรือเท็จ

3

05AB1E , 10 ไบต์

LÑOā/ZQ¨_P

ลองออนไลน์! หรือเป็นชุดทดสอบ

คำอธิบาย

L            # push range [1 ... input]
 Ñ           # divisors of each
  O          # sum of each
   ā/        # divide each by its 1-based index
     Z       # get max
      Q      # compare to each
       ¨     # remove the last element
        _    # logical negation
         P   # product

ฉันคิดว่า (แม้ว่าฉันจะไม่แน่ใจ) สิ่งนี้ล้มเหลวสำหรับ360360(ดูความท้าทายสำหรับรายละเอียดเพิ่มเติม: กรณีทดสอบเชิงลบที่แนะนำอย่างหนึ่งคือ 360360 เพราะมันเชื่อมโยงกับหมายเลขที่มากเกินไปสุดท้าย )
Mr. Xcoder

@ Mr.Xcoder: จริง แก้ไขมัน แต่อาจมีวิธีที่ดีกว่าในการทำเช่นนี้ในตอนนี้
Emigna



2

Mathematica, 53 50 ไบต์

a=Tr@Divisors@#/#&;AllTrue[a@#-Array[a,#-1],#>0&]&

ฟังก์ชั่นบริสุทธิ์ ใช้จำนวนเต็มเป็นอินพุตและส่งคืนTrueหรือFalseเป็นเอาต์พุต


อยากได้อะไรTr@Divisors@#ไหม?
user202729

1

Japt v2.0a0, 12 16 ไบต์

สมองที่ถูกกีดกันการนอนหลับไม่สามารถปรับปรุงได้อีกต่อไป!

ผลตอบแทน1สำหรับความจริงหรือ0เท็จ

Æâ x÷U >Xâ x÷XÃ×

ลองมัน

เสียสละ 4 360360ไบต์ที่จะจับ


คำอธิบาย

  • Uการป้อนข้อมูลโดยนัยของจำนวนเต็ม
  • Æ Ãสร้างอาร์เรย์ของจำนวนเต็มจาก0ไปและผ่านแต่ละผ่านฟังก์ชั่นต่อไปนี้U-1X
  • âUได้รับหารของ
  • ÷UUแบ่งแต่ละเหล่านั้นด้วย
  • x สรุปผลที่ได้
  • Xได้รับหารของ
  • ÷XXแบ่งแต่ละเหล่านั้นด้วย
  • x สรุปผลที่ได้
  • > ตรวจสอบว่าผลลัพธ์แรกมีค่ามากกว่าวินาที
  • × ลดอาเรย์ของบูลีนที่ได้จากการคูณ

1
หากวิธีการปัจจุบันของคุณตรงกับคำอธิบายของคุณมันล้มเหลวสำหรับ360360หรือจำนวนเต็มอื่น ๆ : กรณีทดสอบเชิงลบที่แนะนำอย่างหนึ่ง (ถ้าล่ามของคุณสามารถจัดการได้) คือ 360360 เพราะมันเชื่อมโยงกับจำนวนที่มากเกินไปสุดท้าย
Mr. Xcoder

@ Mr.XCoder: ถั่วคุณพูดถูก! นั่นอาจจะทำให้ฉันต้องเสียค่าใช้จ่ายเมื่อฉันได้รับการแก้ไข
Shaggy

@ Mr.Xcoder: แก้ไขแล้วตอนนี้จะต้องกลับมาใหม่ภายหลังเพื่อดูว่าฉันสามารถปรับปรุงได้ไหม
Shaggy


0

C (gcc), 99 ไบต์

s(n,j,k){for(j=k=0;j++<n;)k+=n%j?0:j;n=k;}f(n,i,r){for(i=r=0;++i<n;)r=1.*s(n)/n<1.*s(i)/i?:r;r=!r;}

ลองออนไลน์!

C, 108 ไบต์

float s(n,j,k){for(j=k=0;j++<n;)k+=n%j?0:j;return k;}f(n,i,r){for(i=r=0;++i<n;)s(n)/n<s(i)/i&&++r;return!r;}

ลองออนไลน์!


เหตุใดจึงsต้องส่งคืนทรี
Nissa

@StephenLeppik การแบ่งการใช้ลอยแทนการแบ่งจำนวนเต็มเมื่อเปรียบเทียบกับการs(n)/n s(i)/i
Steadybox



0

Funky , 79 ไบต์

d=n=>fors=i=0i<=n i++s+=i*!n%i
f=n=>{forc=1c<n c++if(d(n)/n)<=d(c)/c return0 1}

อธิบาย

ครั้งแรกนี้กำหนดฟังก์ชั่นdซึ่งเป็นσฟังก์ชั่นและนี่คือรุ่น golfed ของ

function d(n){
    var s = 0;
    for(var i=0; i<n; i++){
        if(n%i == 0){
            s += i;
        }
    }
    return s;
}

เราสามารถตั้งค่าฉันเป็น 0 เพราะi*n%0มักจะเท่ากับจึง0*...0

ครึ่งถัดไปของฟังก์ชั่นนี้จะกำหนดfซึ่งเป็นฟังก์ชั่น Superabandunce และมันเป็นเพียงรูปแบบ golfed ของ

function f(n){
    for(var c=1; c<n; c++){
        if( (d(n)/n) <= (d(c)/c) ){
            return 0;
        }
    }
    return 1;
}

และนี่เป็นเพียงการตรวจสอบตามข้อมูลจำเพาะของความท้าทายชี้ให้เห็นว่าจำนวนเต็มทั้งหมดจาก 1 ถึง n-1 มีค่าd(n)/nน้อยกว่าอินพุต

ลองออนไลน์!



0

Husk , 9 ไบต์

εü<m§ṁ/Ḋṫ

ลองออนไลน์! ช้าเกินไปสำหรับเคสทดสอบ 360360

คำอธิบาย

εü<m§ṁ/Ḋṫ  Implicit input, say n=6.
        ṫ  Decreasing range: [6,5,4,3,2,1]
   m       Map this function (example argument k=4):
       Ḋ    Divisors of k: [1,2,4]
    §ṁ      Map and sum
      /     division by k: 7/4
           Result: [2,6/5,7/4,4/3,3/2,1]
 ü         Remove duplicates by
  <        strict comparison. This greedily extracts a non-decreasing subsequence: [2]
ε          Is it a singleton list? Yes.

£ü¤<§ṁ/ḊNผมได้ การสร้างรายการทั้งหมดของหมายเลขที่มาก
เกินไป

0

Perl 5, 84 ไบต์

say!grep$a[-1]<=$a[$_],0..(@a=map{$i=$_;my$j;map{$i%$_ or$j+=$_/$i}1..$i;$j}1..<>)-2

ต้องใช้ -E (ฟรี)

การใช้งานของข้อกำหนดที่ตรงไปตรงมา golfed


0

APL (NARS), 61 ตัวอักษร, 122 ไบต์

r←f w;m;k
r←m←0
r+←1⋄k←r÷⍨11πr⋄→3×⍳r≥w⋄→2×⍳∼m<k⋄m←k⋄→2
r←k>m

11πคือผลรวมฟังก์ชันของปัจจัย

  (⍳9),¨ f¨1..9
1 1  2 1  3 0  4 1  5 0  6 1  7 0  8 0  9 0 
  f 360360
0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.