我有一系列随机数。范围实际上由用户确定,但最多为 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;
}
}
}