This package contains subprograms for doing number theoretic computations. It is used in VTC's CIS-2730, Lab #2. ckage Number_Theory is Constant Definitions Gamma : constant := 0.57721_56649_01532_86060_65120_90082_40243_10421_59335_93992; Type Definitions The range of values for which N! can be computed without overflow. subtype Factorial_Argument_Type is Integer range 0 .. 12; -- The range of values that might meaningfully be asked: are you prime? subtype Prime_Argument_Type is Integer range 2 .. Integer'Last; A floating point type with at least 15 significant decimal digits. type Floating_Type is digits 15;
code in ada
with Ada.Numerics.Generic_Elementary_Functions;
package body Number_Theory is
-- Instantiate the library for floating point math using Floating_Type.
package Floating_Functions is new Ada.Numerics.Generic_Elementary_Functions(Floating_Type);
use Floating_Functions;
function Factorial(N : in Factorial_Argument_Type) return Positive is
begin
-- TODO: Finish me!
--
-- 0! is 1
-- N! is N * (N-1) * (N-2) * ... * 1
return 1;
end Factorial;
function Is_Prime(N : in Prime_Argument_Type) return Boolean is
Upper_Bound : Prime_Argument_Type;
Current_Divisor : Prime_Argument_Type;
begin
-- Handle 2 as a special case.
if N = 2 then
return True;
end if;
Upper_Bound := N - 1;
Current_Divisor := 2;
while Current_Divisor < Upper_Bound loop
if N rem Current_Divisor = 0 then
return False;
end if;
Upper_Bound := N / Current_Divisor;
end loop;
return True;
end Is_Prime;
function Prime_Counting(N : in Prime_Argument_Type) return Natural is
begin
-- TODO: Finish me!
--
-- See the lab page for more information.
return 0;
end Prime_Counting;
function Logarithmic_Integral(N : in Prime_Argument_Type) return Floating_Type is
begin
-- TODO: Finish me!
--
-- See the lab page for more information.
return 1.0;
end Logarithmic_Integral;
end Number_Theory;
Step by step
Solved in 3 steps with 4 images