Factors of a Mersenne number: Difference between revisions
Content deleted Content added
m added a ;See also: section header. |
m →{{header|REXX}}: simplified program, optimized a function, added wording to the REXX section header.. |
||
Line 2,259:
=={{header|REXX}}==
REXX practically has no limit (well, up to around 8 million) on the number of decimal digits (precision).
<lang rexx>/*REXX program uses exponent─and─mod operator to test possible Mersenne numbers. */
numeric digits
▲ if z==61 then z=929 /*now, a switcheroo, 61 turns into 929.*/
if \isPrime(z) then iterate /*if Z isn't a prime, keep plugging.*/
r=testMer(z) /*If Z is prime, give Z the 3rd degree.*/
Line 2,280 ⟶ 2,279:
iSqrt: procedure; parse arg x; #=1; r=0; do while #<=x; #=#*4; end
do while #>1; #=#%4; _=x-r-#; r=r%2; if _>=0 then do; x=_; r=r+#; end
end /*while*/ /*iSqrt ≡ integer square root.*/
return r /*───── ─ ── ─ ─ */
/*──────────────────────────────────────────────────────────────────────────────────────*/
modPow: procedure; parse arg base,n,div; sq=1; $=x2b( d2x(n) ) + 0
Line 2,289 ⟶ 2,288:
return sq
/*──────────────────────────────────────────────────────────────────────────────────────*/
testMer: procedure; parse arg x; p=2**x /* [↓] do we have enough
!.=1; !.1=0;
if modPow(2,x,q)==1 then return q
end /*k*/</lang>
Program note: the '''iSqrt''' function computes the integer square root of a non-negative integer without using any floating point, just integers.
|