Как мы можем сравнить число было меньше, чем - PullRequest
0 голосов
/ 28 февраля 2012

Редактировать

Я хочу получить делитель натуральных чисел N.

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

Как можно сравнить число было меньше, чем n / 2?Я хочу найти все факторы менее чем за n / 2 шага

Ответы [ 6 ]

1 голос
/ 28 февраля 2012

Вы можете сделать это в 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);
}
1 голос
/ 28 февраля 2012

Если я правильно вас понимаю, вы хотите определить, меньше ли i n/2?

Попробуйте:

if (i < n/2)
    print(i);
0 голосов
/ 28 февраля 2012

Если я правильно вас понимаю, вы ищете все делители некоторого числа N?

Попробуйте это:

for(int i=1;i<n/2;i++)
{
   if(n%i == 0)
    printf("%d\n",i);
}
0 голосов
/ 28 февраля 2012

попробовать:

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);
0 голосов
/ 28 февраля 2012

Как насчет того, чтобы сначала выполнить деление и сохранение в переменной, чтобы она не рассчитывалась на каждой итерации цикла FOR:

int num = Convert.ToInt32(n/2);
for (int i = 1 ; i < num; i++)
0 голосов
/ 28 февраля 2012

Оба

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

и

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

работают, но второе более эффективно.Делители числа не превысят половину.Например, коэффициенты 100 определенно будут меньше и равны 50.

Есть много других эффективных алгоритмов там .

...