Erdős-primes: Difference between revisions

Dialects of BASIC moved to the BASIC section.
m (syntax highlighting fixup automation)
(Dialects of BASIC moved to the BASIC section.)
Line 186:
 
=={{header|AWK}}==
{{trans|FreeBASIC}}
<syntaxhighlight lang="awk">
# syntax: GAWK -f ERDOS-PRIMES.AWK
Line 230 ⟶ 231:
Erdos primes 1-2500: 25
Erdos prime 7875: 999721
</pre>
 
=={{header|BASIC}}==
==={{header|FreeBASIC}}===
I won't bother reproducing a primality-testing function; use the one from [[Primality_by_trial_division#FreeBASIC]].
<syntaxhighlight lang="freebasic">#include "isprime.bas"
 
function is_erdos_prime( p as uinteger ) as boolean
if not isprime(p) then return false
dim as uinteger kf=1, m=1
while kf < p
kf*=m : m+=1
if isprime(p - kf) then return false
wend
return true
end function
 
dim as integer c = 0, i = 1
while c<7875
i+=1
if is_erdos_prime(i) then
c+=1
if i<2500 or c=7875 then print c, i
end if
wend</syntaxhighlight>
{{out}}<pre>1 2
2 101
3 211
4 367
5 409
6 419
7 461
8 557
9 673
10 709
11 769
12 937
13 967
14 1009
15 1201
16 1259
17 1709
18 1831
19 1889
20 2141
21 2221
22 2309
23 2351
24 2411
25 2437
7875 999721
</pre>
 
==={{header|Tiny BASIC}}===
Can't manage the stretch goal because integers are limited to signed 16 bit.
<syntaxhighlight lang="tinybasic"> LET P = 1
10 IF P > 2 THEN LET P = P + 2
IF P < 3 THEN LET P = P + 1
LET Z = P
GOSUB 1000
IF A = 0 THEN GOTO 10
LET K = 0
20 LET K = K + 1
GOSUB 2000
LET Z = P - F
IF Z < 0 THEN GOTO 30
GOSUB 1000
IF A = 1 THEN LET E = 0
IF A = 1 THEN GOTO 10
GOTO 20
30 LET C = C + 1
IF P < 2500 THEN PRINT C," ",P
IF P > 2500 THEN END
GOTO 10
1000 REM primality of Z by trial division, result is in A
LET Y = 1
LET A = 0
IF Z = 2 THEN LET A = 1
IF Z < 3 THEN RETURN
1010 LET Y = Y + 2
IF (Z/Y)*Y = Z THEN RETURN
IF Y*Y < Z THEN GOTO 1010
LET A = 1
RETURN
2000 REM factorial of K, result is in F
LET A = 1
LET F = 1
2010 LET F = F*A
IF A=K THEN RETURN
LET A = A + 1
GOTO 2010</syntaxhighlight>
{{out}}
<pre>1 2
2 101
3 211
4 367
5 409
6 419
7 461
8 673
9 709
10 769
11 937
12 967
13 1009
14 1201
15 1259
16 1709
17 1831
18 2141
19 2221
20 2351
21 2411
22 2437
</pre>
 
Line 435 ⟶ 552:
Count: 25
</pre>
 
=={{header|FreeBASIC}}==
I won't bother reproducing a primality-testing function; use the one from [[Primality_by_trial_division#FreeBASIC]].
<syntaxhighlight lang="freebasic">#include "isprime.bas"
 
function is_erdos_prime( p as uinteger ) as boolean
if not isprime(p) then return false
dim as uinteger kf=1, m=1
while kf < p
kf*=m : m+=1
if isprime(p - kf) then return false
wend
return true
end function
 
dim as integer c = 0, i = 1
while c<7875
i+=1
if is_erdos_prime(i) then
c+=1
if i<2500 or c=7875 then print c, i
end if
wend</syntaxhighlight>
{{out}}<pre>1 2
2 101
3 211
4 367
5 409
6 419
7 461
8 557
9 673
10 709
11 769
12 937
13 967
14 1009
15 1201
16 1259
17 1709
18 1831
19 1889
20 2141
21 2221
22 2309
23 2351
24 2411
25 2437
7875 999721
</pre>
 
 
=={{header|Go}}==
Line 1,086 ⟶ 1,152:
Erdős primes <= 2500: [2, 101, 211, 367, 409, 419, 461, 557, 673, 709, 769, 937, 967, 1009, 1201, 1259, 1709, 1831, 1889, 2141, 2221, 2309, 2351, 2411, 2437]
The 7875th Erdős prime is: 999721
</pre>
 
=={{header|Tiny BASIC}}==
Can't manage the stretch goal because integers are limited to signed 16 bit.
 
<syntaxhighlight lang="tinybasic"> LET P = 1
10 IF P > 2 THEN LET P = P + 2
IF P < 3 THEN LET P = P + 1
LET Z = P
GOSUB 1000
IF A = 0 THEN GOTO 10
LET K = 0
20 LET K = K + 1
GOSUB 2000
LET Z = P - F
IF Z < 0 THEN GOTO 30
GOSUB 1000
IF A = 1 THEN LET E = 0
IF A = 1 THEN GOTO 10
GOTO 20
30 LET C = C + 1
IF P < 2500 THEN PRINT C," ",P
IF P > 2500 THEN END
GOTO 10
1000 REM primality of Z by trial division, result is in A
LET Y = 1
LET A = 0
IF Z = 2 THEN LET A = 1
IF Z < 3 THEN RETURN
1010 LET Y = Y + 2
IF (Z/Y)*Y = Z THEN RETURN
IF Y*Y < Z THEN GOTO 1010
LET A = 1
RETURN
2000 REM factorial of K, result is in F
LET A = 1
LET F = 1
2010 LET F = F*A
IF A=K THEN RETURN
LET A = A + 1
GOTO 2010</syntaxhighlight>
{{out}}<pre>1 2
2 101
3 211
4 367
5 409
6 419
7 461
8 673
9 709
10 769
11 937
12 967
13 1009
14 1201
15 1259
16 1709
17 1831
18 2141
19 2221
20 2351
21 2411
22 2437
</pre>
 
512

edits