🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.lang.prolog
Article #3857

Re: Perfect Numbers, Complexity

#3857
From: David Bowen
Date: Sat, 14 Jan 1989 09:08
98 lines
3205 bytes
/*

There seems to be some suggestion that the question of perfect numbers has
been worked to death.  Not so!  Previous programs have used the theorem:

>   if (2^p-1) is a (mersenne) prime 
>   then (2^p-1) * 2^(p-1) is a perfect number.

The program below makes use of the fact that there are not many values of p
for which 2^p-1 is a prime, and the first 24 of them are listed in Knuth's
"The Art of Computer Programming", Volume 2.  (Look in the index under
"Mersenne primes".)  These values of p are tabulated below.

This program uses the Quintus library package "long" to handle the large
integers which are involved.  I'm sorry to say that it runs up against a
current limitation in "long" that exponents over 9999 are not allowed.  All
the same, it does manage to generate 22 perfect numbers, the last of which
is a 5985 digit number (if I counted correctly).  That number (p=9941) took
199.5 seconds to generate on a Sun-3/60.  The first 12 numbers, with the
times taken to generate them on a Sun-3/60, are:

6
[P=2, 0.017 sec]

28
[P=3, 0.033 sec]

496
[P=5, 0.033 sec]

8128
[P=7, 0.017 sec]

33550336
[P=13, 0.016 sec]

8589869056
[P=17, 0.033 sec]

137438691328
[P=19, 0.017 sec]

2305843008139952128
[P=31, 0.033 sec]

2658455991569831744654692615953842176
[P=61, 0.033 sec]

191561942608236107294793378084303638130997321548169216
[P=89, 0.033 sec]

13164036458569648337239753460458722910223472318386943117783728128
[P=107, 0.050 sec]

14474011154664524427946373126085988481573677491474835889066354349131199152128
[P=127, 0.100 sec]

*/

:- ensure_loaded(library(long)).    % for eval/[1,2], portray_number/1

portray(N) :- portray_number(N).

perfect_numbers :-
	mersenne_prime_exponent(P),
	statistics(runtime, [T0|_]),
	eval((2^P)-1, M),	    % M = 2^P-1 is a Mersenne prime
	eval(M*(2^(P-1)), N),	    % N = M*2^(P-1)
	statistics(runtime, [T1|_]),
	Time is T1 - T0,
	format('~p~n[P=~p, ~3D sec]~n~n', [N, P, Time]),
	fail.
perfect_numbers.

mersenne_prime_exponent(2).
mersenne_prime_exponent(3).
mersenne_prime_exponent(5).
mersenne_prime_exponent(7).
mersenne_prime_exponent(13).
mersenne_prime_exponent(17).
mersenne_prime_exponent(19).
mersenne_prime_exponent(31).
mersenne_prime_exponent(61).
mersenne_prime_exponent(89).
mersenne_prime_exponent(107).
mersenne_prime_exponent(127).
mersenne_prime_exponent(521).
mersenne_prime_exponent(607).
mersenne_prime_exponent(1279).
mersenne_prime_exponent(2203).
mersenne_prime_exponent(2281).
mersenne_prime_exponent(3217).
mersenne_prime_exponent(4253).
mersenne_prime_exponent(4423).
mersenne_prime_exponent(9689).
mersenne_prime_exponent(9941).
mersenne_prime_exponent(11213).
mersenne_prime_exponent(19937).
Technical Details
Message-ID: <923@quintus.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!iuvax!purdue!decwrl!sun!quintus!dave
References: <377@cwjcc.CWRU.Edu>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!attcan!uunet!lll-winken!lll-lcc!ames!mailrus!iuvax!purdue!decwrl!sun!quintus!dave
From: dave@quintus.uucp (David Bowen)
Newsgroups: comp.lang.prolog
Subject: Re: Perfect Numbers, Complexity
Message-ID: <923@quintus.UUCP>
Date: 14 Jan 89 09:08:18 GMT
References: <377@cwjcc.CWRU.Edu>
Sender: news@quintus.UUCP
Reply-To: dave@quintus.UUCP (David Bowen)
Organization: Quintus Computer Systems, Inc.
Lines: 98