Я взял "Принципы и практика программирования с использованием C++" и решал раннюю задачу, связанную с решетом Эратосфена, и у меня был неожиданный результат, но я не могу точно определить, в чем проблема. Вот мой код:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> prime;
std::vector<int> nonPrime;
int multiple = 0;
for(int i = 2; i < 101; i++) //initialized to first prime number, i will
// be the variable that should contain prime numbers
{
for(int j = 0; j < nonPrime.size(); j++) //checks i against
// vector to see if
// marked as nonPrime
{
if(i == nonPrime[j])
{
goto outer;//jumps to next iteration if number
// is on the list
}
}
prime.push_back(i); //adds value of i to Prime vector if it
//passes test
for(int j = i; multiple < 101; j++) //This loop is where the
// sieve bit comes in
{
multiple = i * j;
nonPrime.push_back(multiple);
}
outer:
;
}
for(int i = 0; i < prime.size(); i++)
{
std::cout << prime[i] << std::endl;
}
return 0;
}
Вопрос только в настоящее время просит меня найти простые числа до 100, используя этот метод. Я также попытался использовать этот текущий метод «goto» для пропуска двойного цикла при определенных условиях, а также попытался использовать логический флаг с оператором if сразу после цикла проверки и просто использовал «продолжить;» заявление, и ни один из них не имел никакого эффекта.
(Честно говоря, я подумал, что, поскольку люди говорят, что goto был злом, возможно, он имел последствия, которых я не предвидел, поэтому я попытался отключить его), но проблема не требует от меня использования модульных функций, поэтому я предполагаю, что он хочет мне решить все это в main, поэтому моя проблема с использованием вложенных циклов в main. Да, и чтобы дополнительно указать мои проблемы с выводом, кажется, что он добавляет только кратные 2 к вектору nonPrime, но все остальное проверяется как прохождение теста (например, 9).
Может ли кто-нибудь помочь мне понять, где я ошибся?
bool
.vector::push-back
станет дорогим и, вероятно, потребует столько же памяти. - person user4581301   schedule 12.03.2018