この世界は。。。いいですか?
На вопрос «напишите на листочке программу на любом языке программирования, которая находит простые числа от 1 до миллиона» ты, как и я, напишешь ответ в три строки: полным перебором. А потом на вопрос «а ускорьте ее в два раза» станешь, как я, вспоминать курс высшей математики, морщить лоб и мямлить, что не совсем помнишь алгоритм поиска простых чисел. Про то, что можно просто выбросить из перебора четные числа вспомнишь только вечером.
Теперь я не могу не написать программу =3
Только моих знаний в математике еще маловато =(
Ну, вот и получу!
Я уверен что начало будет таким:
a = STDIN.gets
(2..(a - 1)).to_a
А дальше надо, чтобы выполнилось действие (я пока что не знаю как это точно написать, надо побольше прочитать про массивы):
a % (2..(a - 1)).to_a
А дальше нужно сделать так, чтобы при получение остатка 0 писало, что число не простое.
Ну и конечно же сделать цикл, который будет спрашивать "Do you want continue? y/n" =3
b = STDIN.gets.chomp()
puts (2..(b.to_i - 1)).to_a
Хм... Пожалуй, перебором проще всего.
> а ускорьте ее в два раза
На листочке? Нереально! Выкидывание чётных чисел даст всего-то ~20%.
Хотя это — python2. А если на «любом языке программирования», то:
Наверняка найдётся язык, в котором есть функция primes.
puts "1"
def solve
x = 1
loop do
x = x + 1
y = 1
loop do
y = y + 1
if y == x
puts x
end
break if x%y == 0
#break if y == x - 1 || x % y == 0
end
break if x == 100
end
end
solve
Оно находит простые числа от 1 до 100, но если сделать break if x == 1000000, то все будет супер.
Я изобрел способ нахождения простых чисел, я - молодец!
Ладно, фиг с ним.