У меня есть диапазон случайных чисел. Диапазон фактически определяется пользователем, но это будет до 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;
}
}
}