Special neighbor primes: Difference between revisions

Dialects of BASIC moved to the BASIC section.
(Added PL/0)
(Dialects of BASIC moved to the BASIC section.)
Line 178:
73,79 -> 151
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>
 
Line 303 ⟶ 451:
67 + 71 - 1 = 137
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>
 
Line 421 ⟶ 530:
</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}}==
<syntaxhighlight lang=J> (,._1++/"1)p: 0 1+/~I.1 p: _1++/ p: _1 0 +/}.i. p:inv 100
Line 946 ⟶ 1,010:
Found 14526 special neighbour primes < 10^6
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>
 
511

edits