【发布时间】:2021-01-31 21:03:26
【问题描述】:
我的任务是在 Ruby 中查找所有素数(不使用素数方法)
以下是我的逻辑、问题、代码和输出。
我的逻辑:
所有素数只有 2 个不同的除数。因此,如果我们计算一个数的除数并且它大于 2,那么它不是素数(除了 1,我还没有处理)
因此我制作了一个数组,用 1 到 10 的所有数字填充它(我稍后会做 1000),并删除所有有超过 2 个除数的数字
问题:
下面的代码似乎没有检查 5,7 或 9。
我的代码(红宝石)
#Create an array that will be your list of prime numbers
primes = []
#create variables
x = 1
counter = 0
y=1
#fill array with numbers (I'm using 10 rather than 1000 for now)
for x in 1..10 # 1..10 is inclusive in ruby
primes.push(x) #put x into primes array
end
primes.each do |prime_number| for y in 1..10 do #for each x and each y, do the following
puts "#{prime_number} , #{y}" #puts is print with a new line
if prime_number % y == 0 #check if element in array divided by numbers 1-10 is mod 0
counter +=1 #is so increase counter by 1
if counter > 2
primes.delete(prime_number)
counter = 0 #if counter get's above 2 then number cannot be prime. hence remove it from array
end
end
end
end
puts primes #print out primes to check result
sum_of_primes = primes.inject(:+) #sum of all primes
puts sum_of_primes #print answer
这是输出:
1 , 1
1 , 2
1 , 3
1 , 4
1 , 5
1 , 6
1 , 7
1 , 8
1 , 9
1 , 10
2 , 1
2 , 2
2 , 3
2 , 4
2 , 5
2 , 6
2 , 7
2 , 8
2 , 9
2 , 10
4 , 1
4 , 2
4 , 3
4 , 4
4 , 5
4 , 6
4 , 7
4 , 8
4 , 9
4 , 10
6 , 1
6 , 2
6 , 3
6 , 4
6 , 5
6 , 6
6 , 7
6 , 8
6 , 9
6 , 10
8 , 1
8 , 2
8 , 3
8 , 4
8 , 5
8 , 6
8 , 7
8 , 8
8 , 9
8 , 10
10 , 1
10 , 2
10 , 3
10 , 4
10 , 5
10 , 6
10 , 7
10 , 8
10 , 9
10 , 10
[1, 3, 5, 7, 9]
25
【问题讨论】:
-
“找到所有的素数”——这可能需要一段时间 ;-)
-
您可能对Sieve of Eratosthenes 感兴趣 - 一种古老的算法,用于查找给定范围内的所有素数,无需除法/模数。
-
@Stefan 好呼唤。请注意,Ruby 已经在标准库中实现了Prime::EratosthenesSieve。
-
唯一的偶数是2。2以上只需要检查奇数。这将使您的工作量大致减半。