У меня есть ряд случайных чисел. Диапазон фактически определяется пользователем, но он может составлять до 1000 целых чисел. Они размещены в этом:
vector<int> n
и значения вставляются следующим образом:
srand(1);
for (i = 0; i < n; i++)
v[i] = rand() % n;
Я создаю отдельную функцию, чтобы найти все непростые значения. Вот то, что у меня есть сейчас, но я знаю, что это совершенно неверно, поскольку я получаю и простое, и составное в серии.
void sieve(vector<int> v, int n)
{
int i,j;
for(i = 2; i <= n; i++)
{
cout << i << " % ";
for(j = 0; j <= n; j++)
{
if(i % v[j] == 0)
cout << v[j] << endl;
}
}
}
Этот метод обычно работал, когда у меня была только серия чисел от 0 до 1000, но, похоже, он не работает сейчас, когда у меня есть числа не по порядку и их дубликаты. Есть ли лучший способ найти непростые числа в векторе? У меня возникает соблазн просто создать еще один вектор, заполнить его n числами и таким образом найти непростые числа, но будет ли это неэффективно?
Хорошо, поскольку диапазон составляет от 0 до 1000, мне интересно, проще ли просто создать вектор с отсортированными 0-n, а затем использовать сито для поиска простых чисел, приближается ли это?
void sieve(vector<int> v, BST<int> t, int n)
{
vector<int> v_nonPrime(n);
int i,j;
for(i = 2; i < n; i++)
v_nonPrime[i] = i;
for(i = 2; i < n; i++)
{
for(j = i + 1; j < n; j++)
{
if(v_nonPrime[i] % j == 0)
cout << v_nonPrime[i] << endl;
}
}
}