Jump to content

Perfect numbers: Difference between revisions

no edit summary
m (→‎{{header|Haskell}}: (minor tidying))
No edit summary
Line 1,579:
return sum == x
end</lang>
 
=={{header|M2000 Interpreter}}==
<lang M2000 Interpreter>
Module PerfectNumbers {
Inventory Known1=2@, 3@
IsPrime=lambda Known1 (x as decimal) -> {
=0=1
if exist(Known1, x) then =1=1 : exit
if x<=5 OR frac(x) then {if x == 2 OR x == 3 OR x == 5 then Append Known1, x : =1=1
Break}
if frac(x/2) else exit
if frac(x/3) else exit
x1=sqrt(x):d = 5@
{if frac(x/d ) else exit
d += 2: if d>x1 then Append Known1, x : =1=1 : exit
if frac(x/d) else exit
d += 4: if d<= x1 else Append Known1, x : =1=1: exit
loop}
}
decompose=lambda IsPrime (n as decimal) -> {
Inventory queue Factors
{
k=2@
While frac(n/k)=0 {
n/=k
Append Factors, k
}
if n=1 then exit
k++
While frac(n/k)=0 {
n/=k
Append Factors, k
}
if n=1 then exit
{
k+=2
while not isprime(k) {k+=2}
While frac(n/k)=0 {
n/=k
Append Factors, k
}
if n=1 then exit
loop
}
}
=Factors
}
\\ Check a perfect and a non perfect number
\\ using normal decompose to prime numbers
p=2 : n=3 : n1=2
Document Doc$
IsPerfect(Decompose(28), 28)
IsPerfect(Decompose(1544), 1544)
While p<32 { ' max 32
if isprime(2^p-1@) then {
perf=(2^p-1@)*2@^(p-1@)
Rem Print perf
\\ decompose pretty fast the Perferct Numbers
\\ all have a series of 2 and last a prime equal to perf/2^(p-1)
inventory queue factors
For i=1 to p-1 {
Append factors, 2@
}
Append factors, perf/2^(p-1)
\\ end decompose
Rem Print factors
IsPerfect(factors, Perf)
}
p++
}
Clipboard Doc$
\\ exit here. No need for Exit statement
Sub IsPerfect(factors, n)
local mm=each(factors,1, -2)
local z=1@, s=1@
while mm {
z*=eval(mm)
s+=z+n/z
}
Local a$=format$("{0} is {1}perfect number", n, If$(s=n->"", "mot "))
Doc$=a$+{
}
Print a$
End Sub
}
PerfectNumbers
</lang>
 
{{out}}
<pre style="height:30ex;overflow:scroll">
28 is perfect number
1544 is mot perfect number
6 is perfect number
28 is perfect number
496 is perfect number
8128 is perfect number
33550336 is perfect number
8589869056 is perfect number
137438691328 is perfect number
2305843008139952128 is perfect number
 
 
</pre >
 
=={{header|M4}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.