package Ada.Containers.Prime_Numbers is pragma Pure; type Primes_Type is array (Positive range <>) of Hash_Type; Primes : constant Primes_Type := (53, 97, 193, 389, 769, 1543, 3079, 6151, 12289, 24593, 49157, 98317, 196613, 393241, 786433, 1572869, 3145739, 6291469, 12582917, 25165843, 50331653, 100663319, 201326611, 402653189, 805306457, 1610612741, 3221225473, 4294967291); function To_Prime (Length : Count_Type) return Hash_Type; end Ada.Containers.Prime_Numbers; package body Ada.Containers.Prime_Numbers is -------------- -- To_Prime -- -------------- function To_Prime (Length : Count_Type) return Hash_Type is I, J, K : Integer'Base; Index : Integer'Base; begin I := Primes'Last - Primes'First; Index := Primes'First; while I > 0 loop J := I / 2; K := Index + J; if Primes (K) < Hash_Type (Length) then Index := K + 1; I := I - J - 1; else I := J; end if; end loop; return Primes (Index); end To_Prime; end Ada.Containers.Prime_Numbers;