我有一系列随机数.范围实际上由用户确定,但最多为1000个整数.它们放在这个:
vectorn
并且值插入如下:
srand(1); for (i = 0; i < n; i++) v[i] = rand() % n;
我正在创建一个单独的函数来查找所有非素数值.这就是我现在所拥有的,但我知道这完全错了,因为我在系列中得到了素数和复合数.
void sieve(vectorv, 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(vectorv, BST t, int n) { vector 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; } } }
Jeremy.. 9
在这段代码中:
if(i % v[j] == 0) cout << v[j] << endl;
您正在测试索引以查看它是否可被v [j]整除.我认为你的意思是反过来,即:
if(v[j] % i == 0)
现在,你正在打印i的随机除数.您不打印已知不是素数的随机数.此外,您的输出中将有重复项,也许这没关系.
在这段代码中:
if(i % v[j] == 0) cout << v[j] << endl;
您正在测试索引以查看它是否可被v [j]整除.我认为你的意思是反过来,即:
if(v[j] % i == 0)
现在,你正在打印i的随机除数.您不打印已知不是素数的随机数.此外,您的输出中将有重复项,也许这没关系.