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)