Graham's Number'ın son rakamlarını hesapla


13

Graham'ın sayısı 7 ile biter. Teorik olarak evrenin kendisinden daha fazla bilgi depolamak için çok büyük bir sayıdır. Ancak Graham sayısının son birkaç basamağını hesaplamak mümkündür.

Son birkaç basamak:

02425950695064738395657479136519351798334535362521
43003540126026771622672160419810652263169355188780
38814483140652526168785095552646051071172000997092
91249544378887496062882911725063001303622934916080
25459461494578871427832350829242102091825896753560
43086993801689249889268099510169055919951195027887
17830837018340236474548882222161573228010132974509
27344594504343300901096928025352751833289884461508
94042482650181938515625357963996189939679054966380
03222348723967018485186439059104575627262464195387

Programınız bunları (veya benzer sayıları) içermeyebilir, ancak hesaplamalıdır. 200 veya daha fazla rakam hesaplamalıdır.

Stdout'a çıktı. İyi donanımlarda maksimum 2 dakikalık çalışma süresi. En kısa program kazanır.


Kaç basamak yazdırılmalıdır?
Dogbert

@Dogbert D'oh. Onu özledim. 200 veya daha fazlası iyi olurdu.
Thomas O

Ruby 3**7625597484987Python'un yaptığı hesaplamayı bile yapmayacak :)
gnibbler

@gnibbler, umm nasıl? sonuç 3 trilyondan fazla basamağa sahip olur.
Dogbert

1
@Dogbert, yeterli hafıza ve zaman verildiğinde Python, uzunluğunu kullanarak hesaplar. Ruby 3 ** 5000000 bile yapmayacak. orada bir tür sınır var gibi görünüyor
gnibbler

Yanıtlar:


9

dc - 21 karakter

[3z202>xO200^|]dsxxrp

Bu, bilgisayarımda yaklaşık bir dakika sürer ve 200'den büyük değerler için çok daha uzun sürer. Baştaki sıfırların çıktısını almaz.

İşte biraz daha uzun ama daha hızlı bir sürüm (26 karakter):

[3rAz^|dz205>x]dsxxAz6-^%p
3[3rAz^|dz202>x]dsxxAz3-^%p # or an extra character for a few less iterations

4

Haskell, 99

Performans yıldız değil, ancak on yıllık donanımımdaki dakikada 500 hane hesaplamayı başarıyor.

f a b|b==0=1|odd b=mod(a*f a(b-1))m|0<1=f(mod(a^2)m)$div b 2
main=print$iterate(f 3)3!!500
m=10^500

(btw, daha modern bir donanımdaki performansını duymak isterim)


Bilgisayarımda çalıştırmak yaklaşık 19 saniye sürer. Yan notta, çıktıdan önce baştaki 0 ​​yazmaz.
Dogbert

Evet, baştaki sıfırlarla tüm rakam sayısında hatalıdır. Sadece 501 ;-) için hesaplayın Kıyaslama için teşekkürler. Yorumladınız mı yoksa derlediniz mi?
JB

İle derledim ghc -o g.exe g.hs. Bunun derlenmenin en iyi yolu olup olmadığından emin değilim.
Dogbert

Ben sadece koştum ghc -O3 graham.hs Online doktor tavsiye badass seçenekleri gibi görünüyor -O2 -fvia-C. (ve GHC'm zaten birkaç sürüm olarak görünüyor)
JB

Her ikisi de -O3ve -O2 -fvia-Cyaklaşık 18.3 saniye içinde aynı hızda çalışıyor gibi görünüyor .
Dogbert

3

Python - 41 karakter

499 basamak

x=3;exec'x=pow(3,x,10**500);'*500;print x

500 basamak

x=3;exec'x=pow(3,x,10**500);'*500;print'0'+`x`

1
Arkadan 500. basamağın 0 olduğu bilgisini kullanıyorsunuz. Örneğin, 200 için yanlış cevap verecektir.

1
@Tim Sorun "200 veya daha fazla basamak" istiyor. Sadece çalışan bir sayı sabit kod ve onunla yapılabilir. (veya bu şekilde bırakın: 499 basamak basar ve bu soru için istendiği kadar iyidir)
JB

@JB: Tabii, 0 dışarıda kalsaydı 499'dan memnun olurum. Ancak, şimdi, belirli bir rakamın 0 olduğunu varsayar.

@ user475 - Güç kulelerinin özelliklerine göre, son (d) basamakları hesaplıyorsanız ve sonuç (d) basamaktan küçükse, eksik basamaklar (solda) "0" olmalıdır. Bu nedenle eksik "0" rakamını eklemek sorun değil, ancak sonucun uzunluğunu inceleyerek ve uygun sayıda "0" ekleyerek yapılmalıdır.
Kevin Fegan

3

Python - 62 59 55 karakter

x=3
for i in range(500):x=pow(3,x,10**500)
print"0%d"%x

Bilgisayarımda yaklaşık 12 saniye sürüyor.

sh-3.1$ time python cg_graham.py
02425950695064738395657479136519351798334535362521430035401260267716226721604198
10652263169355188780388144831406525261687850955526460510711720009970929124954437
88874960628829117250630013036229349160802545946149457887142783235082924210209182
58967535604308699380168924988926809951016905591995119502788717830837018340236474
54888222216157322801013297450927344594504343300901096928025352751833289884461508
94042482650181938515625357963996189939679054966380032223487239670184851864390591
04575627262464195387

real    0m11.807s
user    0m0.000s
sys     0m0.015s
sh-3.1$

3
Yerel powmod bir katil :-)
JB

Kullanabilirsiniz10**500
gnibbler

@JB, bu giriş için Python'u kullanmamın tek nedeni :)
Dogbert

@gnibbler, güncellendi, teşekkürler! Python'da yeniyim :)
Dogbert

0

Aksiyom, 63 bayt

f()==(r:=3;d:=10^203;for i in 1..203 repeat r:=powmod(3,r,d);r)

ungolf ve sonuç

--This find the Graham's number follow the algo found in wiki
--http://en.wikipedia.org/wiki/Graham%27s_number
ff()==
   r:=3; d:=10^203
   for i in 1..203 repeat r:=powmod(3,r,d)
   r

(3) -> a:=f()::String
   (3)
  "8871783083701834023647454888222216157322801013297450927344594504343300901096
  92802535275183328988446150894042482650181938515625357963996189939679054966380
  03222348723967018485186439059104575627262464195387"
                                                             Type: String
(4) -> #a
   (4)  203
                                                    Type: PositiveInteger

# a = 203 len sayısının> 200 olduğu anlamına gelir, menas da ilk önce 0'a sahip değildir ...


0

Kulaklık, 602 byte

(h@HP0&Y+h8h (hx0RWc@4vYcx#@#PJ"B?[#CPx (h Lx$2(pl2YL;KD:T{9$2j<
 LSSh,ZT l2I<Pp,@4SX`,:xtc@T",($)<cKT\lbBAy44,dQl[yL"l+i,;9<*j0P
|)lD[+`\RBi!< LaD(LHPLyt{{@\iADRQdHTZQIT3[X`DB*`X$Cxh$*(T0$| ,[;
4:bit0DqAqi!lCYQ)<Ad(|1<$R4l+#tZrLPDatC[d*@0pDclJbh0|#S9<JRy!TP0
D+!|qiTXp<r$##Atj,B1ts;HLJ"Xp44I4cK4@|Q,4JI$|hp$Zyd+yl:y<s#\pD:9
4RDK,A!<X \cqLZ" h,kHp|qLRQIDh,+StZbL+{(|jqqL;9L"(xd"<s$8\:x,CY\
z0T[,(XdcxlbaD*D;+tDj\JIi4k[)LPDLBzP@DSc$jL $s4BjQ19|;!)|9t;TaQA
dLzit[0@l2!)I$,0P@$y<L4pLPLStQT"!a| $+8(DZ`00t ,RtX4C@$yQ11|KI\"
`|2<k3|R(Dyi<)LshTrzQ$sp D+DRbH|Q$CqT0D;AA\jdXd"ppdK3LzZl#\Bl`@t
k$*,11qTK+Xp|rqDZXp4{C!<Y4

Son 200 basamağı yazdırır.

Lütfen çalıştırmadan önce yeni satırları kaldırın.


Nasıl çalıştırmamız gerekiyor?
Caird Coinheringaahing

Kesinlikle hiçbir fikir (Ben sadece bu BF tercüme). Ama ben github üzerinde "headsecks" aradım ve birkaç uygulama var gibi görünüyor (referans uygulama bağlantısı ölü gibi görünüyor).
Esolanging Fruit
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.