У меня есть ряд случайных чисел. Диапазон фактически определяется пользователем, но он будет до 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;
}
}
}
А, и там есть ползучая ошибка. Вы должны передать вектор int в качестве ссылки, иначе вы не сможете использовать результаты вне сита(). – mstrobl 2008-10-29 21:19:17
Также вы должны использовать push_back, а не v [i] =, так как вектор начинается с размера 0. – Motti 2008-10-29 21:23:03
А, я просто видел, что я неправильно читаю код: v не используется для сохранения каких-либо результатов, а для подачи ввода в метод. Тем не менее, ссылка сохраняет вашу программу от копирования v.size() числа целых чисел, распределения и освобождения. – mstrobl 2008-10-29 21:27:02