Factors of a Mersenne number: Difference between revisions

Content added Content deleted
(java < javascript)
(Added BBC BASIC)
Line 214: Line 214:
Return y
Return y
}</lang>
}</lang>
=={{header|BBC BASIC}}==
<lang bbcbasic> PRINT "A factor of M929 is "; FNmersenne_factor(929)
PRINT "A factor of M937 is "; FNmersenne_factor(937)
END
DEF FNmersenne_factor(P%)
LOCAL K%, Q%
IF NOT FNisprime(P%) THEN = -1
FOR K% = 1 TO 1000000
Q% = 2*K%*P% + 1
IF (Q% AND 7) = 1 OR (Q% AND 7) = 7 THEN
IF FNisprime(Q%) IF FNmodpow(2, P%, Q%) = 1 THEN = Q%
ENDIF
NEXT K%
DEF FNisprime(N%)
LOCAL D%
IF N% MOD 2=0 THEN = (N% = 2)
IF N% MOD 3=0 THEN = (N% = 3)
D% = 5
WHILE D% * D% <= N%
IF N% MOD D% = 0 THEN = FALSE
D% += 2
IF N% MOD D% = 0 THEN = FALSE
D% += 4
ENDWHILE
= TRUE
DEF FNmodpow(X%, N%, M%)
LOCAL I%, Y%, Z%
I% = N% : Y% = 1 : Z% = X%
WHILE I%
IF I% AND 1 THEN Y% = (Y% * Z%) MOD M%
Z% = (Z% * Z%) MOD M%
I% = I% >>> 1
ENDWHILE
= Y%
</lang>
Output:
<pre>A factor of M929 is 13007
A factor of M937 is 28111</pre>

=={{header|C}}==
=={{header|C}}==
<lang C>int isPrime(int n){
<lang C>int isPrime(int n){
Line 239: Line 281:
} while(1);
} while(1);
printf("2^%d - 1 = 0 (mod %d)\n", q, d);}</lang>
printf("2^%d - 1 = 0 (mod %d)\n", q, d);}</lang>

=={{header|C sharp}}==
=={{header|C sharp}}==
<lang csharp>using System;
<lang csharp>using System;