ตัวเลขใหญ่: Ultrafactorials


25

คำถามนี้ถูกทำใหม่แล้วโปรดอ่านใหม่

Ultrafactorials

Ultrafactorials เป็นลำดับของตัวเลขที่สามารถสร้างขึ้นได้โดยใช้ฟังก์ชั่นต่อไปนี้:

a(n) = n! ^ n!

ค่าที่ได้นั้นเพิ่มขึ้นอย่างรวดเร็วมาก หมายเหตุด้านข้าง: นี่คือรายการA046882ใน OEIS ที่เกี่ยวข้องก็คือไฮเปอร์แฟคเทอเรนส์ซึ่งยังคงมีขนาดใหญ่มาก แต่มีลำดับน้อยกว่าเล็กน้อย: A002109

งานของคุณ

งานของคุณคือการใช้ตัวเลขเหล่านี้เป็นภาษาของคุณ โปรแกรมของคุณจะคำนวณผลรวมของ ultrafactorials ทั้งหมดตั้งแต่ 0 ถึงรวม n

อินพุต

โปรแกรมของคุณอาจรับเพียงหนึ่งอินพุต: ตัวเลขซึ่งมีลักษณะคล้ายกับ (n) ultrafactorial ขั้นสุดท้ายที่จะเพิ่มลงในผลรวม อินพุตมั่นใจได้ว่าจะเป็นค่าบวกหรือ 0

เอาท์พุต

ผลลัพธ์ของคุณขึ้นอยู่กับคุณตราบใดที่มีผลรวมของตัวเลขที่ปรากฏ

กฎระเบียบ

  • คุณสามารถสมมติว่าจำนวนเต็มทั้งหมดดังนั้นป้อนจำนวนเต็มและใช้การนับลูปนับจำนวนเต็มเพื่อสร้างผลลัพธ์บางอย่าง

กรณีทดสอบ

Input: -1
Output: Any kind of error (because -1! is undefined), or no handling at all

Input: 0
Output: 1

Input: 1
Output: 2

Input: 2
Output: 6

Input: 3
Output: 46662

ท้าทาย

นี่คือดังนั้นคำตอบที่มีความยาวน้อยที่สุดเป็นไบต์จะชนะ!


2
เราจำเป็นต้องพิจารณาจำนวนเต็มขนาดใหญ่โดยพลการหรือไม่? หรือมันเพียงพอที่จะรองรับขนาดใหญ่ที่สุดที่ชนิดข้อมูลเริ่มต้นของภาษา (เช่นdouble) รองรับ?
Luis Mendo

1
การแปลงในโค้ดและเอาท์พุทขึ้นอยู่กับคุณอินพุทจะเป็นจำนวนเต็ม @LuisMendo
devRicher

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

คำตอบ:


7

05AB1E , 5 ไบต์

รหัส:

Ý!DmO

คำอธิบาย:

Ý       # Take the range [0, ..., input]
 !      # Map factorial over each element
  Dm    # Exponentiate each element to itself
    O   # Take the sum

ใช้การเข้ารหัสCP-1252 ลองออนไลน์!


L!DmOสามารถใช้งานได้หากคุณต้องการถอดบิต "การเข้ารหัส CP-1252"
Magic Octopus Urn

16

Mathematica, 19 ไบต์

Sum[n!^n!,{n,0,#}]&

ขอโทษสำหรับรหัสที่ชัดเจนอย่างยิ่ง;)


การใช้ mathematica สำหรับ mathematica - dick move: D
Transcendental

8

เยลลี่ 6 ไบต์

ลองออนไลน์!

‘Ḷ!*`S // Main link: Argument n (integer)
‘      // Take n, increment by 1
 Ḷ     // Range from [0..n]
  !    // Calculates factorial for each [0..n]
   *`  // Raises each [0!..n!] to the power of itself
     S // Sum the resulting array

มีอะตอมที่เพิ่มขึ้นดังนั้นควรR!*`S‘บันทึกไบต์ (ฉันไป‘Ḷ!*`S)
Jonathan Allan

1
จริง ๆ แล้วฉันกำลังอยู่ในระหว่างการแก้ไขก่อนที่ฉันจะเห็นความคิดเห็นของคุณ: P
Xanderhall

ฉันก็เห็นว่าเป็นงานที่ดี
Jonathan Allan

6

R - 34 30 ไบต์

x=factorial(0:scan());sum(x^x)

vectorizing เป็นสิ่งที่ดี

แก้ไข:บันทึกแล้ว 4 ไบต์ด้วย @MickyT


1
คุณสามารถย่อให้สั้นลงได้โดยเลื่อนคุณสแกนลงในแฟคทอเรียลx=factorial(0:scan());sum(x^x)
MickyT

4

J, 15 12 ไบต์

บันทึก 3 ไบต์ด้วยไมล์!

1#.i.^~@!@,]

คำอธิบาย

1#.i.^~@!@,]  input: y
          ,]  append y to list...
   i.         [0, y)
        !@    factorial each member
     ^~@      raise each to itself
1#.           perform summation

กรณีทดสอบ

   f =: 1#.i.^~@!@,]
   (,. f"0) i.4
0     1
1     2
2     6
3 46662
   (,. f"0) i.6
0           1
1           2
2           6
3       46662
4  1.33374e33
5 3.17504e249

   echo"1] _90]\":f 6x
190281878633201797429473437859705759836595323046380462211756876146775419721154680216391116
383660154937824558291984804764687140715927099993629348072943551413397410741069111169123658
220861477766905534108349401724389611558474171816216027733366046875815097164882588181826712
426524007417126023680300953790645455254723360874298622143752208989152655091222094594342956
890526202094068774356589887610542642450567071133028553816930267473112879050178461179814798
008667622200592591542432361632955904924276854403585221477449385731481108378608652069211835
448555831555820393949831627809528917004144455150642180845929102272754394116905511650997561
389917179995442329297103257850695109383021080317204810134810158543814178231002423431556657
737982683316707709406053569620116083909440177269311235173671447595521339849978144493268530
780365729831790064477684808893338190825461650933123545889305523546630119181308584140916288
912561260392366609493077363059677222110731132927863243720195975705161197786520981159422881
575250362836779593393897664990291828935858671453835924398316498051705698128484688847592380
831018330553151156822298060174230201841578757499203145955456593022852288527824268115043999
037373974753999860179933517198889966353093307592136928730661270863274130109304971274296438
682725017433937245229524959283895094220677649257613358344409711070780405579776000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000003175042373780336892901667920556557182493442088021222004926225128381629943118937129
098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000
000000000000000000000000000000000000000000001333735776850284124449081472890438

1#.i.^~@!@,]ประหยัดเนื้อที่เพิ่มเติมอีกเล็กน้อย
ไมล์

@miles โอ้เยี่ยมมาก ฉันไม่รู้ว่าจะ1#.ทำการสรุป หากยังไม่ได้เป็นเคล็ดลับคุณควรเพิ่มมันอย่างแน่นอน!
Conor O'Brien

4

Perl 6 , 41 38 37 ไบต์

{[+] ([**] [*](1..$_)xx 2 for 0..$_)}

{[+] ([**] ([*] 1..$_)xx 2 for 0..$_)}

{sum (($_**$_ with [*] 1..$_) for 0..$_)}

( ลองออนไลน์ )

คำอธิบาย:

  • for 0 .. $_: สำหรับแต่ละจำนวนเต็มตั้งแต่ 0 ถึงอินพุต
  • [*](1 .. $_) xx 2: คำนวณแฟคทอเรียลสองครั้ง
  • [**] ...: และยกกำลังสองแฟคทอเรียลที่เหมือนกัน
  • [+] ...: จากนั้นรวมผลลัพธ์ทั้งหมดของลูป

ขอบคุณ b2gills สำหรับ 1 ไบต์


([*] …)สามารถเขียนเป็น[*](…)บันทึก byte
Brad Gilbert b2gills

3

Cheddar , 44 37 bytes

n->(0|>n=>(i,a=(1|>i)/(*))->a**a)/(+)

ขอบคุณแพะสำหรับผู้ประกอบการลด! ฉันคิดว่ามันเป็นความคิดที่ดีที่จะเพิ่มแฟคทอเรียล

ลองออนไลน์

Ungolfed

n -> ( 0|>n => (i, a=(1|>i) / (*)) -> a ** a) / (+)

คำอธิบาย

หมายเหตุ:ล้าสมัยเล็กน้อยจะแก้ไข

n ->           // Input
( 0 |> n) =>   // Run below for each of [0, n]
    (              
      i,           // Input
      a =          // Let's keep n! in this variable `a`
         (1 |> i)  // Range from [1, n]
         / (*)     // Multiply all the items of that range
                   // `/` is reduce `(*)` is multiplication function
    ) ->
    a ** a         // A to the power of A
) / (+)        // Sum all results

ไม่ขอบพระคุณพระเจ้าสักหน่อยที่นี่หรือ : D
ข้อบกพร่อง

@ flawr ตกลง คงที่: P
Downgoat

2
ฮ่าฮ่าดีกว่าอาจเป็นหนึ่งในประเพณีไม่กี่อย่างของแพะที่เราเคยเห็นมาแล้วที่นี่ :)
ข้อผิดพลาด


3

PHP, 49 ไบต์

for($f=1;$i<=$argv[1];$f*=++$i)$s+=$f**$f;echo$s;

INFสำหรับn>5ระบบ 64 บิต

สำหรับตัวเลขขนาดใหญ่ 70 ไบต์

while($i<=$argv[1])$s=gmp_add($s,gmp_pow($f=gmp_fac($i++),$f));echo$s;

ต้องการคอมไพล์ด้วย PHP --with-gmp


3

ทับทิม, 64 66 ไบต์

->n{(o=(1..n).map{|i|a=(1..i).inject(:*);a**a}.inject(:+))?o+1:1}

เพิ่มตัวละครสองตัวสำหรับการแก้ไขข้อบกพร่องแบบ off-by-one (จะทำให้การเรียกสั้นลงในภายหลัง)


ฉันไม่ดีกับ Ruby แต่คุณไม่สามารถแก้ไขได้ด้วยa=(0..i)แทนที่จะเป็นa=(1..i)?
Timtech

@Timtech คาดว่าการอัดฉีดเป็นศูนย์ในการคูณไม่ได้ทำอะไรที่ดีเลย :(
DepressedDaniel

ใช่ฉันเดาว่าการเพิ่ม+1เป็นทางออกที่ดีที่สุด
Timtech

@GB โปรแกรมแก้ไขเล็กน้อยสำหรับ n = 0 case
DepaniDaniel


2

Haskell, 67 56 ไบต์

โปรดทราบว่าการส่งนี้ถูกสร้างขึ้นก่อนกฎที่ห้ามการสร้างขึ้นภายใน

p=product
a n=sum[p[x|x<-[p[1..i]],_<-[1..x]]|i<-[0..n]]

ตัวอย่างเช่น:

*Main> a 0
1
*Main> a 1
2
*Main> a 2
6
*Main> a 3
46662
*Main> a 4
1333735776850284124449081472890438
*Main> a 5
3175042373780336892901667920556557182493442088021222004926225128381629943118937129098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000000000000000000000000000000000000000000000001333735776850284124449081472890438



2

R, 42 35ไบต์

ตอนนี้ฉันอ่านคำถามถูกต้องแล้ว

สิ่งนี้ต้องการให้ห้องสมุดgmp (ความแม่นยำหลายทางคณิตศาสตร์) พร้อมใช้งาน สิ่งนี้ทำให้สามารถจัดการได้เป็นจำนวนมาก มิฉะนั้นอะไรมากกว่า 5 INFผลตอบแทน

สิ่งนี้ถูกนำมาใช้เป็นฟังก์ชั่นที่ไม่มีชื่อเพื่อหลีกเลี่ยงสิ่งas.characterที่จะต้องมีการส่งออกไปยัง STDOUT ผ่านcat

function(x)sum((i=gmp::factorialZ(0:x))^i)

ตัวอย่างการวิ่ง

> f <- function(x)sum((i=gmp::factorialZ(0:x))^i)
> f(5)
Big Integer ('bigz') :
[1] 3175042373780336892901667920556557182493442088021222004926225128381629943118937129098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000000000000000000000000000000000000000000000001333735776850284124449081472890438
> f(6)
Big Integer ('bigz') :
[1] 190281878633201797429473437859705759836595323046380462211756876146775419721154680216391116383660154937824558291984804764687140715927099993629348072943551413397410741069111169123658220861477766905534108349401724389611558474171816216027733366046875815097164882588181826712426524007417126023680300953790645455254723360874298622143752208989152655091222094594342956890526202094068774356589887610542642450567071133028553816930267473112879050178461179814798008667622200592591542432361632955904924276854403585221477449385731481108378608652069211835448555831555820393949831627809528917004144455150642180845929102272754394116905511650997561389917179995442329297103257850695109383021080317204810134810158543814178231002423431556657737982683316707709406053569620116083909440177269311235173671447595521339849978144493268530780365729831790064477684808893338190825461650933123545889305523546630119181308584140916288912561260392366609493077363059677222110731132927863243720195975705161197786520981159422881575250362836779593393897664990291828935858671453835924398316498051705698128484688847592380831018330553151156822298060174230201841578757499203145955456593022852288527824268115043999037373974753999860179933517198889966353093307592136928730661270863274130109304971274296438682725017433937245229524959283895094220677649257613358344409711070780405579776000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003175042373780336892901667920556557182493442088021222004926225128381629943118937129098831435345716937405655305190657814877412786176000000000000000000000000000000000000000000000000000000000000000000000000000000000000001333735776850284124449081472890438

f (9) จะทำงานได้ค่อนข้างดี แต่เต็มจำนวนหน้า สองสามร้อยหรือมากกว่านั้นและ 2,017,528 หลัก f (10) ฆ่าเซสชั่นบนเครื่องของฉัน


ฉันคิดว่าเหตุผลที่แตกต่างจากคำตอบอื่น ๆ ก็เพราะคุณควรจะคืนผลรวมจาก 0! ^ 0! ถึง N! ^ N! factorialZ(0:x)แต่นี้เป็นเรื่องง่ายที่จะแก้ไขโดยการเปลี่ยนไป มีเหตุผลเฉพาะที่จะไม่ใช้base::factorial()ฟังก์ชั่นนี้หรือไม่?
JAD

1
@ JarkoDubbeldam ขอบคุณสำหรับการจับ ต้องอ่านคำถามให้ดีขึ้น :) ฉันใช้gmp::factorialZเพื่อจัดการกับตัวเลขขนาดใหญ่
MickyT



1

Haskell, 43 ไบต์

b n|f<-product[1..n]=f^f
a n=sum$b<$>[0..n]

ตัวอย่างการใช้งาน: ->a 346662

bคำนวณ ultrafactorial เดียวและaสรุป ultrafactorials ทั้งหมดจากการ0n



1

Python 2, 82 Bytes

x=input()
s=0
for z in range(x):
 t=1
 for i in range(z+1):t*=i+1
 s+=t**t
print s

คุณได้ลองสรุปความเข้าใจในรายการแล้วหรือยัง?
Riking

1
คุณใช้ x ครั้งเดียวดังนั้นคุณสามารถใช้range(input())สิ่งนี้จะลบไม่กี่ไบต์
george

1

สงสัย 33 ไบต์

@sum(->@^ f\prod rng1#0f)rng0+1#0

การใช้งาน:

(@sum(->@^ f\prod rng1#0f)rng0+1#0)3

คำอธิบาย

rng0+1#0

สร้างช่วงที่ครอบคลุมตั้งแต่ 0 ถึงอินพุต

->@^ f\prod rng1#0f

แผนที่ในช่วงที่มีฟังก์ชั่นที่ 1) คำนวณปัจจัยของรายการที่ 2) ร้านค้าผลให้fและ 3) f^fคำนวณ

sum

รวม


1

TI-Basic, 13 ไบต์

sum(seq(A!^A!,A,0,Ans

ป.ล. คุณสามารถแทนที่sum(seq(ด้วยΣ(หากคุณมีระบบปฏิบัติการรุ่นใหม่ (ไม่มีการเปลี่ยนแปลงขนาด)


1

GameMaker Language, 97 ไบต์

ฟังก์ชั่นหลัก (52 ไบต์)

for(a=0;a<=argument0;a++)b+=power(f(a),f(a))return b

ฟังก์ชั่น f (45 ไบต์)

a=argument0 if!a return 1else return a*f(a--)

1

Ruby 2, 41 ไบต์

->n{(1..n).reduce(s=1){|t,i|t+(s*=i)**s}}

! น่ากลัว วิธีการเริ่มต้นsที่ชาญฉลาดมากในเวลาเดียวกันกับการส่งผ่านเป็นtค่าเริ่มต้นเพื่อลด / ฉีด
DepaniDaniel

สามารถเล่นกอล์ฟอีกหนึ่งตัวละครถึง->n{((t=s=1)..n).map{|i|t+=(s*=i)**s};t}หรือ->n{t=s=1;(1..n).map{|i|t+=(s*=i)**s};t}
DepressedDaniel

1

Dyalog APL ขนาด 10 ไบต์

(+/!*!)0,⍳

อย่างไร?

ช่วงของอินพุต

0, นำหน้าด้วย 0

!*! ใช้ x! ^ x!

+/ รวม


*และ!เป็นฟังก์ชันสเกลาร์ดังนั้นให้ใช้อาร์เรย์: +/*⍨!0,⍳⎕หรือ(+/!*!)0,⍳ถ้าคุณต้องการรถไฟ
อดัม

0

Mathematica, 19 ไบต์

Sum[a!^a!,{a,0,#}]&

ฟังก์ชั่นไม่ระบุชื่อ รับตัวเลขเป็นอินพุตและส่งคืนตัวเลขเป็นเอาต์พุต


1
เราไม่สามารถใช้แฟกทอเรียลหรือการยกกำลังในตัว
Downgoat


0

C #, 79 ไบต์พร้อมเอาต์พุตคอนโซล

n=>{int i=1,j=1;for(;i<=n;i++)j*=i;System.Console.Write(System.Math.Pow(j,j));}

C #, 64 ไบต์เป็นผลตอบแทน

n=>{int i=1,j=1;for(;i<=n;i++)j*=i;return System.Math.Pow(j,j);}

0

จริง11 10 ไบต์

1+r`!;ⁿ`MΣ

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

Program takes implicit input, implicit print at EOF
1+          Add one to the input n+1
  r         Create a range (0,1,..,n)
   `   `    Create a function between the two `
    !       Factorialize the current stack item
     ;      Duplicate the current stack item
      ⁿ     Power a,b from the current stack item
         M  Map the function across the stack top item
          Σ Sum the stack together

0

แร็กเก็ต 54 ไบต์

(for/sum((i(+ 1 n)))(let((t(factorial i)))(expt t t)))

Ungolfed:

#lang racket
(require math)

(define (f n)
  (for/sum ((i (+ 1 n)))
    (let ((t (factorial i)))
      (expt t t))))

การทดสอบ:

(f -1)
(f 0)
(f 1)
(f 2)
(f 3)

เอาท์พุท:

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