Data update
This commit is contained in:
parent
81fd053722
commit
52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions
96
Task/Pell-numbers/Oberon-07/pell-numbers.oberon
Normal file
96
Task/Pell-numbers/Oberon-07/pell-numbers.oberon
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
MODULE PellNumbers; (* find some Pell numbersl trans Algol W, FreeBasic, Phix *)
|
||||
IMPORT Out, Math;
|
||||
|
||||
CONST MAXP = 9;
|
||||
VAR p, pl :ARRAY 21 OF INTEGER; (* need more than 10 Pell numbers *)
|
||||
c, pdx, j, n, nsw :INTEGER; (* to find the fifth Pell prime *)
|
||||
|
||||
(* returns true if n is prime, false otherwise, uses trial division *)
|
||||
PROCEDURE isPrime( n : INTEGER ):BOOLEAN;
|
||||
VAR prime :BOOLEAN;
|
||||
f, f2, toNext :INTEGER;
|
||||
BEGIN
|
||||
IF n < 3 THEN prime := n = 2
|
||||
ELSIF n MOD 3 = 0 THEN prime := n = 3
|
||||
ELSIF ~ ODD( n ) THEN prime := FALSE
|
||||
ELSE
|
||||
prime := TRUE;
|
||||
f := 5;
|
||||
f2 := 25;
|
||||
toNext := 24; (* note: ( 2n + 1 )^2 - ( 2n - 1 )^2 = 8n *)
|
||||
WHILE ( f2 <= n ) & prime DO
|
||||
prime := n MOD f # 0;
|
||||
INC( f, 2 );
|
||||
f2 := toNext;
|
||||
INC( toNext, 8 )
|
||||
END
|
||||
END
|
||||
RETURN prime
|
||||
END isPrime;
|
||||
|
||||
PROCEDURE NearIsoscelesRightTriangles;
|
||||
VAR i, i0, i1, i2, t, found :INTEGER;
|
||||
BEGIN
|
||||
i0 := 0; i1 := 1; t := 1; found := 0;
|
||||
i := 1;
|
||||
WHILE found < 10 DO
|
||||
INC( i );;
|
||||
i2 := i1*2 + i0;
|
||||
IF ODD( i ) THEN
|
||||
Out.String( " [" );Out.Int( t, 0 );
|
||||
Out.String( ", " );Out.Int( t + 1, 0 );
|
||||
Out.String( ", " );Out.Int( i2, 0 );
|
||||
Out.String( "]" );Out.Ln;
|
||||
INC( found )
|
||||
END;
|
||||
INC( t, i2 ); i0 := i1; i1 := i2
|
||||
END
|
||||
END NearIsoscelesRightTriangles;
|
||||
|
||||
BEGIN
|
||||
|
||||
p[ 0 ] := 0; p[ 1 ] := 1;
|
||||
pl[ 0 ] := 2; pl[ 1 ] := 2;
|
||||
FOR n := 2 TO 20 DO
|
||||
p[ n ] := 2 * p[ n - 1 ] + p[ n - 2 ];
|
||||
pl[ n ] := 2 * pl[ n - 1 ] + pl[ n - 2 ]
|
||||
END;
|
||||
|
||||
Out.String( "First 10 Pell numbers:" );
|
||||
FOR n := 0 TO MAXP DO Out.String( " " );Out.Int( p[ n ], 1 ) END; Out.Ln;
|
||||
Out.String( "First 10 Pell-Lucas numbers:" );
|
||||
FOR n := 0 TO MAXP DO Out.String( " " );Out.Int( pl[ n ], 1 ) END; Out.Ln;
|
||||
|
||||
Out.Ln;Out.String( "First 10 rational approximations of sqrt(2) (" );
|
||||
Out.Real( Math.sqrt( 2.0 ), 8 );Out.String( "):" );
|
||||
FOR n := 1 TO MAXP DO
|
||||
j := pl[ n ] DIV 2;
|
||||
Out.Ln;
|
||||
Out.String( " " );Out.Int( j, 0 );Out.String( "/" );Out.Int( p[ n ], 0 );
|
||||
Out.String( " ~= " );Out.Real( FLT( j ) / FLT( p[ n ] ), 8 );
|
||||
END;
|
||||
Out.Ln;
|
||||
Out.Ln;Out.String( "First 5 Pell primes:" );
|
||||
Out.Ln;Out.String( "index Pell prime" );
|
||||
|
||||
c := 0;
|
||||
pdx := 2;
|
||||
WHILE c < 5 DO
|
||||
IF isPrime( p[ pdx ] ) THEN
|
||||
Out.Ln;Out.Int( pdx, 6 );Out.String( " " );Out.Int( p[ pdx ], 0 );
|
||||
INC( c )
|
||||
END;
|
||||
INC( pdx )
|
||||
END;
|
||||
|
||||
Out.Ln;Out.Ln;Out.String( "First 10 Newman-Shank-Williams numbers:" );Out.Ln;
|
||||
FOR n := 0 TO MAXP DO
|
||||
nsw := p[ 2 * n ] + p[ 2 * n + 1 ];
|
||||
Out.String( " " );Out.Int( nsw, 0 )
|
||||
END;
|
||||
|
||||
Out.Ln;
|
||||
Out.Ln;Out.String( "First 10 near isosceles right triangles:" );Out.Ln;
|
||||
NearIsoscelesRightTriangles
|
||||
|
||||
END PellNumbers.
|
||||
Loading…
Add table
Add a link
Reference in a new issue