当前位置:  开发笔记 > 编程语言 > 正文

查找合数

如何解决《查找合数》经验,为你挑选了1个好方法。

我有一系列随机数.范围实际上由用户确定,但最多为1000个整数.它们放在这个:

vector n

并且值插入如下:

srand(1);

for (i = 0; i < n; i++)
  v[i] = rand() % n;

我正在创建一个单独的函数来查找所有非素数值.这就是我现在所拥有的,但我知道这完全错了,因为我在系列中得到了素数和复合数.

void sieve(vector 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 v, 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的随机除数.您不打印已知不是素数的随机数.此外,您的输出中将有重复项,也许这没关系.



1> Jeremy..:

在这段代码中:

if(i % v[j] == 0)
  cout << v[j] << endl;

您正在测试索引以查看它是否可被v [j]整除.我认为你的意思是反过来,即:

if(v[j] % i == 0)

现在,你正在打印i的随机除数.您不打印已知不是素数的随机数.此外,您的输出中将有重复项,也许这没关系.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有