Я дам вам подсказку.Присмотритесь к начальному значению, которое вы даете temp
.Какое первое значение вы исключаете из sieve
?Существуют ли другие меньшие кратные i
, которые также следует исключить?Какое начальное значение вы могли бы использовать, чтобы убедиться, что все правильные числа пропущены?
Существуют некоторые методы, которые вы можете использовать, чтобы понять это самостоятельно.Одним из них является попытка заставить вашу программу работать, используя нижний предел.Вместо 2 миллионов, попробуйте, скажем, 30. Он достаточно мал, чтобы вы могли быстро вычислить правильный ответ вручную и даже просмотреть свою программу на бумаге по одной строке за раз.Это позволит вам определить, где что-то начинает идти не так.
Другой вариант - использовать отладчик для построчного обхода вашей программы.Отладчики являются мощными инструментами, хотя их не всегда легко освоить.
Вместо того, чтобы использовать отладчик для отслеживания вашей программы, вы можете распечатывать сообщения по мере ее выполнения.Скажем, пусть он напечатает каждое число в результате getPrimes
вместо того, чтобы просто печатать сумму.(Это еще одна причина, по которой вы хотите сначала попробовать нижний предел - чтобы не перегружать объем производства.)