Pour quoi c est la division par c dans AC0?

11

Supposons que notre entrée soit un binaire xet que nous sortir x / c x/c , où c est un entier constant. Ce n'est qu'un changement si c est une puissance de deux, mais qu'en est-il des autres nombres? Pouvons-nous le faire avec un circuit à profondeur constante pour chaque c ? Et c=3 ?

xmodc

domotorp
la source

Réponses:

16

L'addition et la soustraction de nombres binaires sont dansAC0 .

Pour tout nombre constant , est réductible à la division par ( ): cxmodcAC0cx/c

xmodc=x(x/c++x/cc times)

On sait que est difficile pour pour tout qui n'est pas une puissance de . Ainsi est difficile pour pour tout qui n'est pas une puissance de .xmodcAC0c2x/cAC0c2

Comme l'a noté Emil dans les commentaires il y a une réduction facile pour premier impair de (qui est, avec ) pour avec entrée binaire: nous utilisons uniquement des bits d'entrée qui sont des multiples de et utilisons FLT ( ). cMODciximodcxi{0,1}xmodcp12(p1)imodp=1

daniello
la source
Le même argument s'applique à tout qui n'est pas une puissance de 2.c
Emil Jeřábek
4
Il est facile de montrer que n'est pas AC ^ 0 pour les autres : par exemple, nous pouvons supposer que est un nombre premier impair, puis vous pouvez réduire MOD_p en utilisant chaque ème bit . Ou vous pouvez appliquer la classification de Barrington-Thérien: c'est une langue régulière, et son monoïde syntaxique est un groupe non trivial. xmodccc=p(p1)
Emil Jeřábek
@Emil Jerabek: Merci, c'était exactement l'aide dont j'avais besoin :)
daniello