algorytm funkcji modulo

0

Mam problem z zapisaniem czegoś takiego:
if(x%2==0)
//wykonaj instrukcje

ale bez używania funkcji modulo. Ma ktoś jakiś pomysł?

3

Zakładając, że x jest liczbą nieujemną (unsigned int), x % 2 == 0 można zastąpić x & 1 == 0 (gdzie & oznacza binarne and).

3

Dla dowlnego podzielnika: jak jak w matematyce.
Podzielić to bez ułamków, wymnożyć, i wynik mnożenia odjąć od początkowej liczby

1

Jako ciekawostka (nie jest to najlepszy pomysł) można wykorzystać zachowanie się dzielenia liczb w C/C++/Java/C# a więc to że (3 / 2 == 1):
((x / 2) * 2) == x.

Zastępując operacje dzielenia przez >> i << można też:

((x >> 1) << 1) == x

Na koniec pomysł zupełnie szalony: Math.pow(-1, x) > 0.

1

Algorytm reszty z dzielenia to poziom szkoły podstawowej:

a%b -> Odejmuj b od liczby a dopóki wynik jest większy lub równy b.

def modulo(a,b):
    remainder = a
    while remainder >= b:
        remainder = remainder-b
    return remainder

W przypadku dzielenia przez 2 wystarczy oczywiście sprawdzać tylko ostatni bit, bo on określa czy liczba jest parzysta czy nieparzysta.

0

tylko jak ten rozpisany mod zapisać jako warunek if bez tworzenia nowej funkcji? (to pseudokod, więc nie mogę za bardzo szaleć)

0

to pseudokod, więc nie mogę za bardzo szaleć

Mozesz definiowac funkcje

0

@leaomfg:

tylko jak ten rozpisany mod zapisać jako warunek if bez tworzenia nowej funkcji?

Nie da się. A co do kodu, można też rekurencyjnie:

def modulo(m n):
    if n <= m:
        return modulo(m - n, n)
    else:
        return m
1

(to pseudokod, więc nie mogę za bardzo szaleć)

Wręcz przeciwnie - pseudokod wszystko skompiluje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1