2013-09-30 3 views
1

Я создаю программу, которая помещает простые числа в вектор. Я приведу пример, чтобы лучше показать, как эта программа должна работать:Соответствие правилу

Пользователь: 3

Выход 3

Пользователь: 13

Ouput: 3 5 7 11 13

Чтобы выразить это словами, эта программа добавляет простые числа, меньшие или равные входному значению пользователя. Затем, наконец, давая bool true или false, если фактический ввод пользователя был простым числом.

  if (found) 
      { 
       vector_output.push_back(j); 

      } 
      if (number == j) 
      { 
       if (found ==false) 
        return false; 
       else 




void checkprime::vector_finder()  
{ 
    for (int k=0; k < vector_output.size(); k ++) 
    {  
     cout << vector_output[k]; 
    }  
} 

К сожалению, мой вывод:

Пользователь 3

Выход 3

Пользователь 13

Выход: 3 5 5 5 7 7 7 7 7 9 11 13

Как я могу найти его, где вектор не дублирует числа?

Я думал, что что-то подобное, если заявление прямо перед vector_output.pushback (J), такую ​​как

if (vector_output.size() != 0 && vector.output.back() != j) 
     vector_output.push_back(j); 

будет работать, но это ничего с этим не выводит.

+1

Если вы намеренно делаете это как можно медленнее, вы действительно хотите использовать Сито Эратосфена для этого. –

+2

Я хотел бы, чтобы моя программа не создавала дубликаты, тогда я перейду к эффективности. Я все еще очень начинающий, и я понимаю, что это не лучший способ сделать что-то. – Mdjon26

+0

Как замечание по теме - определение того, является ли число простым, является ОЧЕНЬ трудной задачей. Вам лучше молиться, чтобы люди входили в небольшие количества. –

ответ

1

Вы можете удалить дубликаты, используя std::unique. Например:

std::vector<int> v{1, 2, 2, 3, 5, 9, 1}; 
std::sort(v.begin(), v.end()); 

v.erase(std::unique(v.begin(), v.end()), v.end()); 
+0

Как именно вы его используете? Я никогда раньше не пользовался уникальным. – Mdjon26

+0

@ Mdjon26 После того, как вы закончили вычисление простых чисел, выполните 'std :: unqiue (vector_output.begin(), vector_output.end());' и это должно удалить все дубликаты в этом диапазоне. Для этого требуется '#include ' – 0x499602D2

+0

Я положил его в свой оператор void до того, как я установил свой вектор, и когда я вставил номер 13. он выводит 3 5 7 9 11 13 7 7 7 9 11 13, что действительно близко, но по какой-то причине он повторяется. – Mdjon26

Смежные вопросы