素数ふるいですが、エラトステネスのふるいではありません。
私はプログラミングとRuby全般に慣れていないので、書き方が悪いと感じています。これは私が Ruby で書いた 2 番目のプログラムにすぎませんが、可能な限り最適化したいと考えています。問題は、プログラムのパス/データ構造が理想的ではないことを知っていることを除いて、高速化するために何を変更する必要があるかをしっかりと理解していないことです.MAKEに取り組むための概念がないだけです.それらは理想的です
理想的な答えは、必ずしも「X を Y に変更する」とは限りませんが、この種の情報に関する適切なリソース、または効率に関する情報を導き出す方法を教えてくれれば、より役に立ちます。プログラムのさまざまな部分。
count = 0
x = 0
$results = Array.new []
inpt = []
class PrimeFun
def initialize(x, y)
array1 = (x..y).to_a
array1.each do |n|
if PrimeFun.primelogic(n%60, n) == 1
array1.delete_if { |p| p % n == 0}
$results << n
elsif n == 2 || n == 3 || n == 5
$results << n
end
end
end
def self.primelogic(r, n)
@prime = case r
when 1, 13, 17, 29, 37, 41, 49, 53
formulaone(n)
when 7, 19, 31, 43
formulatwo(n)
when 11, 23, 47, 59
formulathree(n)
else -1
end
end
def self.formulaone(n)
@x = 1
@y = -1
until 4*(@x**2) >= n
@y = -@y if Math.sqrt(n-(4*(@x**2))).floor - Math.sqrt(n-(4*(@x**2))) == 0
@x += 1
end
@y
end
def self.formulatwo(n)
@x = 1
@y = -1
until 3*(@x**2) >= n
@y = -@y if Math.sqrt(n-(3*(@x**2))).floor - Math.sqrt(n-(3*(@x**2))) == 0
@x += 1
end
@y
end
def self.formulathree(n)
@x = 1
@y = -1
until 3*(@x**2) >= n
@y = -@y if Math.sqrt(((@x**2)+n)/3).floor - Math.sqrt(((@x**2)+n)/3) == 0 && @x > @y
@x += 1
end
@y
end
end
x = STDIN.gets.to_i
while count < x
inpt << STDIN.gets.chomp
count += 1
end
inpt.each do |n|
a = n.split(" ").map { |a| a.to_i }
PrimeFun.new(a[0], a[1])
$results << ""
end
puts $results