Special neighbor primes: Difference between revisions
Content added Content deleted
(Added PL/0) |
(Dialects of BASIC moved to the BASIC section.) |
||
Line 178: | Line 178: | ||
73,79 -> 151 |
73,79 -> 151 |
||
Special neighbor primes 3-99: 13 |
Special neighbor primes 3-99: 13 |
||
</pre> |
|||
=={{header|BASIC}}== |
|||
==={{header|FreeBASIC}}=== |
|||
<syntaxhighlight lang="freebasic">#include"isprime.bas" |
|||
function nextprime( n as uinteger ) as uinteger |
|||
'finds the next prime after n |
|||
if n = 0 then return 2 |
|||
if n < 3 then return n + 1 |
|||
dim as integer q = n + 2 |
|||
while not isprime(q) |
|||
q+=2 |
|||
wend |
|||
return q |
|||
end function |
|||
dim as uinteger p1, p2 |
|||
for p1 = 3 to 100 step 2 |
|||
p2 = nextprime(p1) |
|||
if isprime(p1) andalso p2<100 andalso isprime( p1 + p2 - 1 ) then |
|||
print p1, p2, p1 + p2 - 1 |
|||
end if |
|||
next p1 |
|||
</syntaxhighlight> |
|||
{{out}}<pre> |
|||
3 5 7 |
|||
5 7 11 |
|||
7 11 17 |
|||
11 13 23 |
|||
13 17 29 |
|||
19 23 41 |
|||
29 31 59 |
|||
31 37 67 |
|||
41 43 83 |
|||
43 47 89 |
|||
61 67 127 |
|||
67 71 137 |
|||
73 79 151 |
|||
</pre> |
|||
==={{header|GW-BASIC}}=== |
|||
{{works with|BASICA}} |
|||
<syntaxhighlight lang="gwbasic">10 FOR P = 3 TO 99 STEP 2 |
|||
20 GOSUB 130 |
|||
30 IF Q = 0 THEN GOTO 110 |
|||
40 GOSUB 220 |
|||
50 IF P2>100 THEN END |
|||
60 T = P |
|||
70 P = P2 + T - 1 |
|||
80 GOSUB 130 |
|||
90 IF Q = 1 THEN PRINT USING "## + ## - 1 = ###";T;P2;P |
|||
100 P=T |
|||
110 NEXT P |
|||
120 END |
|||
130 REM tests if a number is prime |
|||
140 Q=0 |
|||
150 IF P=3 THEN Q=1:RETURN |
|||
160 I=1 |
|||
170 I=I+1 |
|||
180 IF INT(P/I)*I = P THEN RETURN |
|||
190 IF I*I<=P THEN GOTO 170 |
|||
200 Q = 1 |
|||
210 RETURN |
|||
220 REM finds the next prime after P, result in P2 |
|||
230 IF P = 0 THEN P2 = 2: RETURN |
|||
240 IF P<3 THEN P2 = P + 1: RETURN |
|||
250 T = P |
|||
260 P = P + 1 |
|||
270 GOSUB 130 |
|||
280 IF Q = 1 THEN P2 = P: P = T: RETURN |
|||
290 GOTO 260</syntaxhighlight> |
|||
{{out}} |
|||
<pre> 3 + 5 - 1 = 7 |
|||
5 + 7 - 1 = 11 |
|||
7 + 11 - 1 = 17 |
|||
11 + 13 - 1 = 23 |
|||
13 + 17 - 1 = 29 |
|||
19 + 23 - 1 = 41 |
|||
29 + 31 - 1 = 59 |
|||
31 + 37 - 1 = 67 |
|||
41 + 43 - 1 = 83 |
|||
43 + 47 - 1 = 89 |
|||
61 + 67 - 1 = 127 |
|||
67 + 71 - 1 = 137 |
|||
73 + 79 - 1 = 151 |
|||
</pre> |
|||
==={{header|Tiny BASIC}}=== |
|||
<syntaxhighlight lang="tinybasic"> REM B = SECOND OF THE NEIGBOURING PRIMES |
|||
REM C = P + B - 1 |
|||
REM I = index variable |
|||
REM P = INPUT TO NEXTPRIME ROUTINE AND ISPRIME ROUTINE, also first of the two primes |
|||
REM T = Temporary variable, multiple uses |
|||
REM Z = OUTPUT OF ISPRIME, 1=prime, 0=not |
|||
LET P = 1 |
|||
20 LET P = P + 2 |
|||
IF P > 100 THEN END |
|||
GOSUB 100 |
|||
IF Z = 0 THEN GOTO 20 |
|||
GOSUB 120 |
|||
IF B > 100 THEN END |
|||
LET T = P |
|||
LET P = P + B - 1 |
|||
GOSUB 100 |
|||
LET C = P |
|||
LET P = T |
|||
IF Z = 0 THEN GOTO 20 |
|||
PRINT P," + ",B," - 1 = ", C |
|||
GOTO 20 |
|||
100 REM PRIMALITY BY TRIAL DIVISION |
|||
LET Z = 1 |
|||
LET I = 2 |
|||
110 IF (P/I)*I = P THEN LET Z = 0 |
|||
IF Z = 0 THEN RETURN |
|||
LET I = I + 1 |
|||
IF I*I <= P THEN GOTO 110 |
|||
RETURN |
|||
120 REM next prime after P |
|||
IF P < 2 THEN LET B = 2 |
|||
IF P = 2 THEN LET B = 3 |
|||
IF P < 3 THEN RETURN |
|||
LET T = P |
|||
130 LET P = P + 1 |
|||
GOSUB 100 |
|||
IF Z = 1 THEN GOTO 140 |
|||
GOTO 130 |
|||
140 LET B = P |
|||
LET P = T |
|||
RETURN</syntaxhighlight> |
|||
{{out}}<pre> |
|||
3 + 5 - 1 = 7 |
|||
5 + 7 - 1 = 11 |
|||
7 + 11 - 1 = 17 |
|||
11 + 13 - 1 = 23 |
|||
13 + 17 - 1 = 29 |
|||
19 + 23 - 1 = 41 |
|||
29 + 31 - 1 = 59 |
|||
31 + 37 - 1 = 67 |
|||
41 + 43 - 1 = 83 |
|||
43 + 47 - 1 = 89 |
|||
61 + 67 - 1 = 127 |
|||
67 + 71 - 1 = 137 |
|||
73 + 79 - 1 = 151 |
|||
</pre> |
</pre> |
||
Line 303: | Line 451: | ||
67 + 71 - 1 = 137 |
67 + 71 - 1 = 137 |
||
73 + 79 - 1 = 151 |
73 + 79 - 1 = 151 |
||
</pre> |
|||
=={{header|FreeBASIC}}== |
|||
<syntaxhighlight lang="freebasic">#include"isprime.bas" |
|||
function nextprime( n as uinteger ) as uinteger |
|||
'finds the next prime after n |
|||
if n = 0 then return 2 |
|||
if n < 3 then return n + 1 |
|||
dim as integer q = n + 2 |
|||
while not isprime(q) |
|||
q+=2 |
|||
wend |
|||
return q |
|||
end function |
|||
dim as uinteger p1, p2 |
|||
for p1 = 3 to 100 step 2 |
|||
p2 = nextprime(p1) |
|||
if isprime(p1) andalso p2<100 andalso isprime( p1 + p2 - 1 ) then |
|||
print p1, p2, p1 + p2 - 1 |
|||
end if |
|||
next p1 |
|||
</syntaxhighlight> |
|||
{{out}}<pre> |
|||
3 5 7 |
|||
5 7 11 |
|||
7 11 17 |
|||
11 13 23 |
|||
13 17 29 |
|||
19 23 41 |
|||
29 31 59 |
|||
31 37 67 |
|||
41 43 83 |
|||
43 47 89 |
|||
61 67 127 |
|||
67 71 137 |
|||
73 79 151 |
|||
</pre> |
</pre> |
||
Line 421: | Line 530: | ||
</pre> |
</pre> |
||
=={{header|GW-BASIC}}== |
|||
<syntaxhighlight lang="gwbasic">10 FOR P = 3 TO 99 STEP 2 |
|||
20 GOSUB 130 |
|||
30 IF Q = 0 THEN GOTO 110 |
|||
40 GOSUB 220 |
|||
50 IF P2>100 THEN END |
|||
60 T = P |
|||
70 P = P2 + T - 1 |
|||
80 GOSUB 130 |
|||
90 IF Q = 1 THEN PRINT USING "## + ## - 1 = ###";T;P2;P |
|||
100 P=T |
|||
110 NEXT P |
|||
120 END |
|||
130 REM tests if a number is prime |
|||
140 Q=0 |
|||
150 IF P=3 THEN Q=1:RETURN |
|||
160 I=1 |
|||
170 I=I+1 |
|||
180 IF INT(P/I)*I = P THEN RETURN |
|||
190 IF I*I<=P THEN GOTO 170 |
|||
200 Q = 1 |
|||
210 RETURN |
|||
220 REM finds the next prime after P, result in P2 |
|||
230 IF P = 0 THEN P2 = 2: RETURN |
|||
240 IF P<3 THEN P2 = P + 1: RETURN |
|||
250 T = P |
|||
260 P = P + 1 |
|||
270 GOSUB 130 |
|||
280 IF Q = 1 THEN P2 = P: P = T: RETURN |
|||
290 GOTO 260</syntaxhighlight> |
|||
{{out}}<pre> |
|||
3 + 5 - 1 = 7 |
|||
5 + 7 - 1 = 11 |
|||
7 + 11 - 1 = 17 |
|||
11 + 13 - 1 = 23 |
|||
13 + 17 - 1 = 29 |
|||
19 + 23 - 1 = 41 |
|||
29 + 31 - 1 = 59 |
|||
31 + 37 - 1 = 67 |
|||
41 + 43 - 1 = 83 |
|||
43 + 47 - 1 = 89 |
|||
61 + 67 - 1 = 127 |
|||
67 + 71 - 1 = 137 |
|||
73 + 79 - 1 = 151 |
|||
</pre> |
|||
=={{header|J}}== |
=={{header|J}}== |
||
<syntaxhighlight lang=J> (,._1++/"1)p: 0 1+/~I.1 p: _1++/ p: _1 0 +/}.i. p:inv 100 |
<syntaxhighlight lang=J> (,._1++/"1)p: 0 1+/~I.1 p: _1++/ p: _1 0 +/}.i. p:inv 100 |
||
Line 946: | Line 1,010: | ||
Found 14526 special neighbour primes < 10^6 |
Found 14526 special neighbour primes < 10^6 |
||
Found 103611 special neighbour primes < 10^7 |
Found 103611 special neighbour primes < 10^7 |
||
</pre> |
|||
=={{header|Tiny BASIC}}== |
|||
<syntaxhighlight lang="tinybasic"> REM B = SECOND OF THE NEIGBOURING PRIMES |
|||
REM C = P + B - 1 |
|||
REM I = index variable |
|||
REM P = INPUT TO NEXTPRIME ROUTINE AND ISPRIME ROUTINE, also first of the two primes |
|||
REM T = Temporary variable, multiple uses |
|||
REM Z = OUTPUT OF ISPRIME, 1=prime, 0=not |
|||
LET P = 1 |
|||
20 LET P = P + 2 |
|||
IF P > 100 THEN END |
|||
GOSUB 100 |
|||
IF Z = 0 THEN GOTO 20 |
|||
GOSUB 120 |
|||
IF B > 100 THEN END |
|||
LET T = P |
|||
LET P = P + B - 1 |
|||
GOSUB 100 |
|||
LET C = P |
|||
LET P = T |
|||
IF Z = 0 THEN GOTO 20 |
|||
PRINT P," + ",B," - 1 = ", C |
|||
GOTO 20 |
|||
100 REM PRIMALITY BY TRIAL DIVISION |
|||
LET Z = 1 |
|||
LET I = 2 |
|||
110 IF (P/I)*I = P THEN LET Z = 0 |
|||
IF Z = 0 THEN RETURN |
|||
LET I = I + 1 |
|||
IF I*I <= P THEN GOTO 110 |
|||
RETURN |
|||
120 REM next prime after P |
|||
IF P < 2 THEN LET B = 2 |
|||
IF P = 2 THEN LET B = 3 |
|||
IF P < 3 THEN RETURN |
|||
LET T = P |
|||
130 LET P = P + 1 |
|||
GOSUB 100 |
|||
IF Z = 1 THEN GOTO 140 |
|||
GOTO 130 |
|||
140 LET B = P |
|||
LET P = T |
|||
RETURN</syntaxhighlight> |
|||
{{out}}<pre> |
|||
3 + 5 - 1 = 7 |
|||
5 + 7 - 1 = 11 |
|||
7 + 11 - 1 = 17 |
|||
11 + 13 - 1 = 23 |
|||
13 + 17 - 1 = 29 |
|||
19 + 23 - 1 = 41 |
|||
29 + 31 - 1 = 59 |
|||
31 + 37 - 1 = 67 |
|||
41 + 43 - 1 = 83 |
|||
43 + 47 - 1 = 89 |
|||
61 + 67 - 1 = 127 |
|||
67 + 71 - 1 = 137 |
|||
73 + 79 - 1 = 151 |
|||
</pre> |
</pre> |
||