我们如何比较数量小于

时间:2012-02-28 16:04:45

标签: c algorithm math complexity-theory

修改

我想得到自然数N的除数。

for (int i=1;i<n/2;i++)
 if(n%i==0)
    print(i);

我们如何比较数字小于n / 2? 我想在不到n / 2步中找到所有因素

6 个答案:

答案 0 :(得分:1)

如果我理解正确,您想确定i是否小于n/2

试试这个:

if (i < n/2)
    print(i);

答案 1 :(得分:1)

您实际上可以在sqrt(n)步骤中执行此操作,如下所示:

for(int i = 1;i <= sqrt(n);i++)
{
  if(n % i == 0)
  {
    print(i);
    if(i != sqrt(n))
      print(n / i);
  }
}

这将打印n的每个除数一次。请注意,与示例代码一样,我假设print函数可以按如下方式实现:

void print(int i)
{
  printf("%d\n", i);
}

答案 2 :(得分:0)

两个

for(int i=1;i<n;i++) 

for(int i=1;i<n/2;i++)

有效但第二种效率更高。一个数字的除数不会超过它的一半。 例如,100的因子肯定会小于等于50。

there还有许多其他有效的算法。

答案 3 :(得分:0)

尝试:

for(int i=1;  i < (n/2); ++i)
    if (n%i==0)
         printf("%d\n",i);

这个优化怎么样(你只需要平方根):

for(int i=1;  i < sqrt(n); ++i)
    if (n%i==0)
        printf("%d\n",i);

或者这个,你只覆盖奇数(如果检查素数就很有用):

for(int i=1;  i < sqrt(n); i+=2)
    if (n%i==0)
         printf("%d\n",i);

答案 4 :(得分:0)

如果我理解正确,你正在寻找N号的所有除数?

试试这个:

for(int i=1;i<n/2;i++)
{
   if(n%i == 0)
    printf("%d\n",i);
}

答案 5 :(得分:-1)

如何首先进行除法并存储在变量中,以便在FOR循环的每次迭代中不计算它:

int num = Convert.ToInt32(n/2);
for (int i = 1 ; i < num; i++)