Re: наибольший нечётный множитель

From
Oleg I. Khovayko ()
To
Andrew Nikitin
Date
2002-10-28T17:51:55Z
Area
RU.ALGORITHMS
From: "Oleg I. Khovayko" <olegh@ncbi.nlm.nih.gov>

Andrew Nikitin wrote:
> 
> положителное) значение. Надо написать выражение значением которого является
> наибольший нечётный делитель числа x.

Ну если время вычислений не особо важно, то:

/* greatest odd divisor */
 int god(int x)
 {
  int d = x | 1;
  while(x % d) d -= 2;
  return d;
 }

PS:
1. Работает только для положительных x.
2. если x нечетно, т.е. само является своим 
максимальным нечетным делителем, оно же и возвращается.
Если хочется искать только нетривиальный делитель,
в цикле двойку надо вычитать перед сравнением, то есть
вторая строчка будет выглядеть как:
  do { d -= 2; } while(x % d);
При этом надо, чтобы входной X  был больше 1.


-- 
#include <best/regards.hpp>
Oleg I. KHOVAYKO  
(301)435-5885 || WEB: http://olegh.spedia.net
--- ifmail v.2.15dev5
 * Origin: National Center for Biotechnology Information (2:5020/400)