lunlumo #7074(2008/08/09 10:42 GMT) [ Perl ] Rating0/0=0.00
10進10桁で1時間16分23秒掛かりました。(PentiumM1.6GHz)1桁毎に3倍ずつ増えるとして計算すると,20桁では8~10年程掛かる事になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#! /usr/bin/perl use strict; use bigint; package Prime; sub checkPrime { my ($pkg,$primes,$forCheck) = @_; !scalar(grep { $forCheck % $_ == 0 } @$primes); } sub getNext { my ($pkg,$primes,$from) = @_; my $next = $from; $next++ until ($pkg->checkPrime($primes,$next)); $next; } sub primes { my ($pkg,$count) = @_; my $next = 1; my $primes = []; for(1..$count) { $next = $pkg->getNext($primes,$next+1); push(@$primes,$next); } $primes; } package Meertens; sub meertenses { my ($pkg,$max,$primes,$meertenses,$place,$baseNumber,$baseGoedel) = @_; my $prime = $primes->[$place]; for (0..9) { my $number = $baseNumber * 10 + $_; my $goedel; last if ($number > $max); $goedel = $baseGoedel * $prime ** $_; push(@$meertenses,$goedel) if ($goedel == $number); if ($place < length($max) && $goedel < $max) { $pkg->meertenses($max,$primes,$meertenses,$place + 1,$number,$goedel); } } $meertenses; } package main; sub timestamp { my ($second, $minute, $hour, $day, $month, $year) = @_; $year += 1900; $month++; sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year,$month,$day,$hour,$minute,$second); } print "start:".timestamp(localtime)."\n"; print join("\n",@{Meertens->meertenses(9999999999,Prime->primes(10),[],0,0,1)})."\n"; print "end:".timestamp(localtime)."\n"; 1;
Rating0/0=0.00-0+
[ reply ]
lunlumo #7074() [ Perl ] Rating0/0=0.00
10進10桁で1時間16分23秒掛かりました。(PentiumM1.6GHz)1桁毎に3倍ずつ増えるとして計算すると,20桁では8~10年程掛かる事になります。
Rating0/0=0.00-0+
[ reply ]