I have a range of random numbers. The range is actually determined by the user but it will be up to 1000 integers. They are placed in this:
vector<int> n
and the values are inserted like this:
srand(1); for (i = 0; i < n; i++) v[i] = rand() % n;
I’m creating a separate function to find all the non-prime values. Here is what I have now, but I know it’s completely wrong as I get both prime and composite in the series.
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; } } }
This method typically worked when I just had a series of numbers from 0-1000, but it doesn’t seem to be working now when I have numbers out of order and duplicates. Is there a better method to find non-prime numbers in a vector? I’m tempted to just create another vector, fill it with n numbers and just find the non-primes that way, but would that be inefficient?
Okay, since the range is from 0-1000 I am wondering if it’s easier to just create vector with 0-n sorted, and then using a sieve to find the primes, is this getting any closer?
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; } } }
In this code:
You are testing your index to see if it is divisible by v[j]. I think you meant to do it the other way around, i.e.:
Right now, you are printing random divisors of i. You are not printing out random numbers which are known not to be prime. Also, you will have duplicates in your output, perhaps that is ok.