n 번째 짝수 퍼펙트 수 출력


16

도전

입력 위치에 정수 n이 주어지면 0 <= n <= 2^10n 번째 정수까지 출력합니다.

완벽한 숫자

완전 숫자는 숫자이며, x (자체 제외)의 합은 x와 같습니다. 예를 들어 6 :

6: 1, 2, 3, 6

그리고 물론 1 + 2 + 3 = 66은 완벽합니다.

완벽한 숫자 인 경우 x짝수 x mod 2 = 0입니다.

다음은 처음 10 개의 완벽한 숫자입니다.

6
28
496
8128
33550336
8589869056
137438691328
2305843008139952128
2658455991569831744654692615953842176
191561942608236107294793378084303638130997321548169216

원하는대로 색인을 생성 할 수 있습니다. 6은 1 또는 0의 완벽한 숫자 일 수 있습니다.

승리

바이트 단위의 최단 코드가 이깁니다.


2
@LeakyNun 제 생각에는 공개 질문입니다. 만약이 질문이 n 번째 홀수 완전 수로 출력 되었다면, 당신은 그것을 해결하기 위해 10 억의 보상 현상금이 필요할 것입니다. blogs.ams.org/mathgradblog/2013/07/25/odd-perfect-numbers-exists (10 ^ 300 미만은 없음)
Rohan Jhunjhunwala

1
가장 작은 홀수 완벽한 숫자는 무엇입니까?
Leaky Nun

5
짝수 N은 메르 센 소수가 완벽 IFF 인 (P) 등이 N = P (p + 1) / 2 . 홀수의 완벽한 수에 대한 공식은 없습니다. 또한 홀수의 완벽한 숫자조차 존재하는지는 알 수 없습니다.
Dennis

2
좀 빠지는. 알려진 메르 센 소수 는 49 개 뿐입니다 .
Dennis

1
@BetaDecay : $ 49 $보다 크므로 60 번째 완벽한 숫자는 알려져 있지 않습니다.
로스 Millikan

답변:


7

젤리 , 7 바이트

6Æṣ=$#Ṫ

온라인으로 사용해보십시오!

작동 원리

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.

제수에 관한 이렇게 많은 내장 명령 ...
에릭 Outgolfer

6

Mathematica, 13 바이트

놀랍게도 내장 기능이 있습니다.

PerfectNumber

예:

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

나는 그것에 대한 표준 허점이 있다고 생각합니까?
Paŭlo Ebermann 2016 년

1
@ PaŭloEbermann은 19 개의 downvotes와 94 개의 upvotes 가이를
Tim

4

MATL , 15 바이트

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

아주 느린. n 번째 완벽한 숫자가 발견 될 때까지 숫자를 하나씩 계속 증가시킵니다 .

온라인으로 사용해보십시오!

설명

`        % 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 바이트

µNNѨOQ½

온라인으로 사용해보십시오!

설명

µ          # 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

파이썬 2 , 198153 83 78 77 75 74 바이트

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

온라인으로 사용해보십시오!

이제는 psuedocode처럼 읽습니다.

  • 저장된 45 @Leaky 수녀 합 기능과 지능형리스트에 대해 가르쳐 때문에 수많은 바이트.

  • @shooqie의 불필요한 괄호 제거 제안 덕분에 2 바이트가 절약되었습니다.

우리는 n 개의 완벽한 숫자를 찾을 때까지 모든 짝수를 반복합니다.


당신 g은 실제로 단지 sum입니다.
Leaky Nun

@LeakyNun은 파이썬 라이브러리를 알지 못했기 때문에 올바르게 제공됩니다. 나는 정말로 자바와 SILOS 이상의 것을 배워야한다.
Rohan Jhunjhunwala 2016 년




2

PHP, 111 바이트

0 인덱싱

완벽한 숫자는 n=x*y x=2^iand y=2^(i+1)-1와 y가 소수 여야 하는 숫자라는 개념으로 작동 합니다.

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];

온라인으로 사용해보십시오!



1

스칼라, 103 바이트

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

1

하스켈, 61 바이트

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

색인은 0에서 시작할 수 있으므로을 필요로하지 않습니다 ||x==1. !!닫는 괄호 바로 앞 을 이동하여 연산자 섹션을 작성하고 filter를 다른 목록 이해 로 대체하여 바이트를 절약 할 수도 있습니다 .
faubi

0

자바 스크립트 (ES6), 68 바이트

n=>eval(`for(x=5;n;s||n--)for(f=s=++x;f--;)(x/f-(x/f|0))||(s-=f);x`)


0

펄 6 , 42 바이트

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

입력 인덱스는 1부터 시작합니다.


0

클로저, 79 바이트

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

사양에 따라 for :when조건이 많이 사용 됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.