module LsPrime @@lsprimes=[2,3] def LsPrime.[](i) @@lsprimes[i] end def LsPrime.size @@lsprimes.size end def LsPrime.last @@lsprimes.last end def LsPrime.each @@lsprimes.each {|v| yield v} nil end def LsPrime.isprime?(n) calcule(n) return false if @@lsprimes.index(n)==nil return true end def LsPrime.calcule(n) # n est arrondi au nombre impair inférieur ou égal n-=1 if n%2==0 return @@lsprimes.last if n<=@@lsprimes.last # Le plus grand nombre premier connu apartirde=@@lsprimes.last # Génération du tableau des nombres impairs plus grands # que le dernier nombre premier connu, jusqu'à n inclus s=Array.new((n-@@lsprimes.last)/2) {|i| 2*i+2+@@lsprimes.last} return @@lsprimes.last if s.size==0 debut=s.first # Rayer tous les multiples des nombres premiers # connus qui sont dans s @@lsprimes.each do |v| if v>2 j=(v*v-debut)/2 j+=v while j<0 while j