Xuất số chẵn thứ n


16

Thử thách

Cho một số nguyên, n, làm đầu vào trong đó 0 <= n <= 2^10, xuất số thứ n thậm chí hoàn hảo.

Số hoàn hảo

Một số hoàn hảo là một số, x trong đó tổng các yếu tố của nó (không bao gồm chính nó) bằng x. Ví dụ: 6:

6: 1, 2, 3, 6

Và, tất nhiên 1 + 2 + 3 = 6, vì vậy 6 là hoàn hảo.

Nếu một số hoàn hảo x, là chẵn , x mod 2 = 0.

Ví dụ

Sau đây là 10 số thậm chí hoàn hảo đầu tiên:

6
28
496
8128
33550336
8589869056
137438691328
2305843008139952128
2658455991569831744654692615953842176
191561942608236107294793378084303638130997321548169216

Lưu ý rằng bạn có thể lập chỉ mục này theo cách bạn muốn: 6 có thể là số hoàn hảo thứ 1 hoặc 0.

Chiến thắng

Mã ngắn nhất trong byte thắng.


2
@LeakyNun Tôi nghĩ, đó là một câu hỏi mở. Nếu câu hỏi này là đầu ra số hoàn hảo thứ n ... Bạn sẽ cần một tỷ tiền thưởng để giải quyết nó. blog.ams.org/mathgradblog/2013/07/25/odd-perinf-numbers-exist (không tồn tại dưới 10 ^ 300)
Rohan Jhunjhunwala

1
Số lẻ nhỏ nhất hoàn hảo là gì?
Leaky Nun

5
Một số chẵn n là iff hoàn hảo có một Mersenne thủ pn = p (p + 1) / 2 . Không có công thức như vậy cho các số hoàn hảo lẻ; hơn nữa, không biết có tồn tại những con số hoàn hảo kỳ lạ hay không.
Dennis

2
Không hẳn. Chỉ có 49 số nguyên tố Mersenne được biết đến.
Dennis

1
@BetaDecay: nó lớn hơn $ 49 $, vì vậy con số hoàn hảo thứ 60 không được biết đến.
Ross Millikan

Câu trả lời:


7

Thạch , 7 byte

6Æṣ=$#Ṫ

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

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

6Æṣ=$#Ṫ  Main link. Argument: n

6        Set the return value to 6.
     #   Execute the link to the left with argument k = 6, 7, 8, ... until n
         values of k result in a truthy value. Yield the array of matches.
    $        Combine the two links to the left into a monadic chain.
 Æṣ              Compute the sum of k's proper divisors.
   =             Compare the result with k.
      Ṫ  Tail; extract the last match.

Vì vậy, nhiều nội dung liên quan đến ước số ...
Erik the Outgolfer

6

Toán học, 13 byte

Không ngạc nhiên, có một tích hợp.

PerfectNumber

Thí dụ:

In[1]:= PerfectNumber[18]                                                       

Out[1]= 33570832131986724437010877211080384841138028499879725454996241573482158\

>    45044404288204877880943769038844953577426084988557369475990617384115743842\

>    47301308070476236559422361748505091085378276585906423254824947614731965790\

>    74656099918600764404702181660294469121778737965822199901663478093006075022\

>    35922320184998563614417718592540207818507301504509772708485946474363553778\

>    15002849158802448863064617859829560720600134749556178514816801859885571366\

>    09224841817877083608951191123174885226416130683197710667392351007374503755\

>    40335253147622794359007165170269759424103195552989897121800121464177467313\

>    49444715625609571796578815564191221029354502997518133405151709561679510954\

>    53649485576150660101689160658011770193274226308280507786835049549112576654\

>    51011967045674593989019420525517538448448990932896764698816315598247156499\

>    81962616327512831278795091980742531934095804545624886643834653798850027355\

>    06153988851506645137759275553988219425439764732399824712438125054117523837\

>    43825674443705501944105100648997234160911797840456379499200487305751845574\

>    87014449512383771396204942879824895298272331406370148374088561561995154576\

>    69607964052126908149265601786094447595560440059050091763547114092255371397\

>    42580786755435211254219478481549478427620117084594927467463298521042107553\

>    17849183589266903954636497214522654057134843880439116344854323586388066453\

>    13826206591131266232422007835577345584225720310518698143376736219283021119\

>    28761789614688558486006504887631570108879621959364082631162227332803560330\

>    94756423908044994601567978553610182466961012539222545672409083153854682409\

>    31846166962495983407607141601251889544407008815874744654769507268678051757\

>    74695689121248545626112138666740771113961907153092335582317866270537439303\

>    50490226038824797423347994071302801487692985977437781930503487497407869280\

>    96033906295910199238181338557856978191860647256209708168229116156300978059\

>    19702685572687764976707268496046345276316038409383829227754491185785965832\

>    8888332628525056

Tôi nghĩ rằng có một lỗ hổng tiêu chuẩn cho điều đó?
Paŭlo Ebermann

1
@ PaŭloEbermann đúng, với 19 lượt tải xuống và một nhận xét với 94 lượt tán thành về nó: codegolf.meta.stackexchange.com/a/1078/32933
Tim

4

MATL , 15 byte

`@Z\s@E=vtsG<}n

Rất chậm. Nó tiếp tục cố gắng tăng từng con số một cho đến khi tìm thấy số hoàn hảo thứ n .

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

Giải trình

`        % Do...while
  @      %   Push iteration index, k (starting at 1)
  Z\     %   Array of divisors
  s      %   Sum
  @E     %   Push k. Multiply by 2
  =      %   Equal? If so, k is a perfect number
  v      %   Concatenate vertically. This gradually builds an array which at the k-th
         %   iteration contains k zero/one values, where ones indicate perfect numbers
  ts     %   Duplicate. Sum of array
  G<     %   Push input. Less than? This is the loop condition: if true, proceed with
         %   next iteration
}        % Finally (execute right before exiting loop)
  n      %   Number of elements of the array
         % End (implicit). Display (implicit)


2

05AB1E , 8 byte

µNNѨOQ½

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

Giải trình

µ          # loop over increasing N until counter equals input
 N         # push N
  NÑ       # push factors of N
    ¨      # remove last factor (itself)
     O     # sum factors
      Q    # compare the sum to N for equality
       ½   # if true, increase counter

2

Python 2 , 198 153 83 78 77 75 74 byte

i=input()
j=0
while i:j+=1;i-=sum(x*(j%x<1)for x in range(1,j))==j
print j

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

Bây giờ nó chỉ đọc như psuedocode.

  • Đã lưu 45 Vô số byte vì @Leaky Nun đã dạy tôi về chức năng tổng hợp và hiểu danh sách.

  • Đã lưu 2 byte nhờ đề xuất của @ shooqie để xóa dấu ngoặc không liên tục.

Chúng tôi chỉ lặp đi lặp lại qua mọi số chẵn cho đến khi chúng tôi tìm thấy n số hoàn hảo.


lưu ý rằng bạn gthực sự chỉ là sum.
Leaky Nun

@LeakyNun phục vụ tôi ngay, vì không biết các thư viện python. Tôi thực sự nên học nhiều hơn là chỉ java và SILOS.
Rohan Jhunjhunwala




2

PHP, 111 byte

Lập chỉ mục 0

Làm việc với quan niệm rằng một số hoàn hảo là một số nơi n=x*y x=2^iy=2^(i+1)-1và y phải thủ

for(;!$r[$argn];$u?:$r[]=$z)for($z=2**++$n*($y=2**($n+1)-1),$u=0,$j=1;$j++<sqrt($y);)$y%$j?:$u++;echo$r[$argn];

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



1

Scala, 103 byte

n=>Stream.from(1).filter(_%2==0).filter(x=>Stream.from(1).take(x-1).filter(x%_==0).sum==x).drop(n).head

1

Haskell, 61 byte

(!!)(filter(\x->x==sum[n|n<-[1..x-1],x`mod`n==0]||x==1)[1..])

Vì chỉ mục có thể bắt đầu từ 0, nên bạn không cần ||x==1. Bạn cũng có thể lưu byte bằng cách di chuyển !!ngay trước dấu ngoặc đơn đóng để tạo phần toán tử và bằng cách thay thế bằng cách filterhiểu danh sách khác.
faubi


0

Perl 6 , 42 byte

{(grep {$_==[+] grep $_%%*,^$_},^∞)[$_]}

Chỉ số đầu vào là 1 dựa trên.


0

Clojure, 79 byte

#(nth(for[i(range):when(=(apply +(for[j(range 1 i):when(=(mod i j)0)]j))i)]i)%)

Theo thông số kỹ thuật, sử dụng nặng cho :whentình trạng của.

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.