Pell numbers: Difference between revisions
Content added Content deleted
m (→{{header|ALGOL 68}}: Remov unneeded declaration) |
(Added Algol W) |
||
Line 222: | Line 222: | ||
[211929657785303, 211929657785304, 299713796309065] |
[211929657785303, 211929657785304, 299713796309065] |
||
[1235216565974040, 1235216565974041, 1746860020068409] |
[1235216565974040, 1235216565974041, 1746860020068409] |
||
</pre> |
|||
=={{header|ALGOL W}}== |
|||
{{Trans|FreeBASIC|via Algol 68 - basic task only and only 5 Pell primes as Algol W limits integers to 32-bit.}} |
|||
<syntaxhighlight lang="algolw"> |
|||
begin % find some Pell numbers - trans FreeBasic ( which is trans Phix ) % |
|||
% returns true if n is prime, false otherwise, uses trial division % |
|||
logical procedure isPrime ( integer value n ) ; |
|||
if n < 3 then n = 2 |
|||
else if n rem 3 = 0 then n = 3 |
|||
else if not odd( n ) then false |
|||
else begin |
|||
logical prime; |
|||
integer f, f2, toNext; |
|||
prime := true; |
|||
f := 5; |
|||
f2 := 25; |
|||
toNext := 24; % note: ( 2n + 1 )^2 - ( 2n - 1 )^2 = 8n % |
|||
while f2 <= n and prime do begin |
|||
prime := n rem f not = 0; |
|||
f := f + 2; |
|||
f2 := toNext; |
|||
toNext := toNext + 8 |
|||
end while_f2_le_n_and_prime ; |
|||
prime |
|||
end isPrime ; |
|||
integer MAX_P; |
|||
MAX_P := 9; |
|||
begin |
|||
integer array p, pl ( 0 :: 20 ); % need more than 10 Pell numbers % |
|||
integer c, pdx; % to find the fifth Pell prime % |
|||
p( 0 ) := 0; p( 1 ) := 1; |
|||
pl( 0 ) := 2; pl( 1 ) := 2; |
|||
for n := 2 until 20 do begin |
|||
p( n ) := 2 * p( n - 1 ) + p( n - 2 ); |
|||
pl( n ) := 2 * pl( n - 1 ) + pl( n - 2 ) |
|||
end for_n ; |
|||
write( "First 10 Pell numbers:" ); |
|||
for n := 0 until MAX_P do begin writeon( i_w := 1, s_w := 0, " ", p( n ) ) end; |
|||
write();write( "First 10 Pell-Lucas numbers:" ); |
|||
for n := 0 until MAX_P do begin |
|||
writeon( i_w := 1, s_w := 0, " ", pl( n ) ) |
|||
end for_n ; |
|||
write( s_w := 0, "First 10 rational approximations of sqrt(2) (" ); |
|||
writeon( s_w := 0, r_format := "A", r_w := 8, r_d := 6, sqrt( 2 ), "):" ); |
|||
for n := 1 until MAX_P do begin |
|||
integer j; |
|||
j := pl( n ) div 2; |
|||
write( i_w := 1, s_w := 0, " ", j, "/", p( n ), " ~= " |
|||
, r_format := "A", r_w := 8, r_d := 6, j / p( n ) |
|||
) |
|||
end for_n; |
|||
write();write( "First 5 Pell primes:" ); write( "index Pell prime" ); |
|||
c := 0; |
|||
pdx := 2; |
|||
while c < 5 do begin |
|||
if isPrime( p( pdx ) ) then begin |
|||
write( i_w := 5, s_w := 0, pdx, " ", i_w := 1, p( pdx ) ); |
|||
c := c + 1 |
|||
end if_isPrime_p_pdx ; |
|||
pdx := pdx + 1 |
|||
end while_c_lt_5 ; |
|||
write(); write( "First 10 Newman-Shank-Williams numbers:" );write(); |
|||
for n := 0 until MAX_P do begin |
|||
integer nsw; |
|||
nsw := p( 2 * n ) + p( 2 * n + 1 ); |
|||
writeon( i_w := 1, s_w := 0, " ", nsw ) |
|||
end for_n; |
|||
write();write( "First 10 near isosceles right triangles:" ); |
|||
begin |
|||
integer i, i0, i1, i2, t, found; |
|||
i0 := 0; i1 := 1; t := 1; found := 0; |
|||
i := 1; |
|||
while found < 10 do begin |
|||
i := i + 1; |
|||
i2 := i1*2 + i0; |
|||
if odd( i ) then begin |
|||
write( i_w := 1, s_w := 0, " [", t, ", ", t + 1, ", ", i2, "]" ); |
|||
found := found + 1 |
|||
end if_odd_i ; |
|||
t := t + i2; i0 := i1; i1 := i2 |
|||
end while_found_lt_10 |
|||
end |
|||
end |
|||
end. |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre style="height:40ex;overflow:scroll;"> |
|||
First 10 Pell numbers: 0 1 2 5 12 29 70 169 408 985 |
|||
First 10 Pell-Lucas numbers: 2 2 6 14 34 82 198 478 1154 2786 |
|||
First 10 rational approximations of sqrt(2) (1.414213): |
|||
1/1 ~= 1.000000 |
|||
3/2 ~= 1.500000 |
|||
7/5 ~= 1.400000 |
|||
17/12 ~= 1.416666 |
|||
41/29 ~= 1.413793 |
|||
99/70 ~= 1.414285 |
|||
239/169 ~= 1.414201 |
|||
577/408 ~= 1.414215 |
|||
1393/985 ~= 1.414213 |
|||
First 5 Pell primes: |
|||
index Pell prime |
|||
2 2 |
|||
3 5 |
|||
5 29 |
|||
11 5741 |
|||
13 33461 |
|||
First 10 Newman-Shank-Williams numbers: |
|||
1 7 41 239 1393 8119 47321 275807 1607521 9369319 |
|||
First 10 near isosceles right triangles: |
|||
[2, 3, 5] |
|||
[12, 13, 29] |
|||
[70, 71, 169] |
|||
[408, 409, 985] |
|||
[2378, 2379, 5741] |
|||
[13860, 13861, 33461] |
|||
[80782, 80783, 195025] |
|||
[470832, 470833, 1136689] |
|||
[2744210, 2744211, 6625109] |
|||
[15994428, 15994429, 38613965] |
|||
</pre> |
</pre> |
||