Untuk apa c dibagi dengan c di AC0?

11

Misalkan input kita adalah biner dan kita harus menampilkan , di mana adalah bilangan bulat konstan. Ini hanya pergeseran jika adalah kekuatan dua, tetapi bagaimana dengan angka lainnya? Bisakah kita melakukannya dengan sirkuit kedalaman konstan untuk setiap ? Bagaimana dengan ?x / c c c c c = 3xx/ccccc=3

ps. Saya tahu bahwa komputasi sulit, tetapi ini tampaknya tidak berhubungan.xmodc

domotorp
sumber

Jawaban:

16

Penambahan dan pengurangan angka biner ada di AC0 .

Untuk bilangan konstan c , xmodc adalah AC0 dapat direduksi menjadi pembagian dengan c ( x/c ):

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

Diketahui bahwa xmodc sulit untuk AC0 untuk setiap c yang bukan kekuatan 2 . Jadi x/c sulit untuk AC0 untuk setiap c yang bukan kekuatan 2 .

Sebagaimana dicatat oleh Emil di komentar ada pengurangan mudah bagi aneh perdana dari (yaitu, dengan ) untuk dengan input biner: kami hanya menggunakan bit input yang merupakan kelipatan dan menggunakan FLT ( ). M O D c i x i mod c x i{ 0 , 1 } x mod c p - 1 2 ( p - 1 ) i mod p = 1cMODciximodcxi{0,1}xmodcp12(p1)imodp=1

daniello
sumber
Argumen yang sama berlaku untuk mana pun yang bukan merupakan kekuatan 2.c
Emil Jebekábek
4
Itu bukan AC ^ 0 untuk lainnya mudah untuk ditampilkan: misalnya, kita dapat menganggap adalah prime yang aneh, dan kemudian Anda dapat mengurangi MOD_p untuk itu dengan menggunakan setiap bit th . Atau Anda dapat menerapkan klasifikasi Barrington-Thérien: ini adalah bahasa biasa, dan monoid sintaksisnya adalah grup nontrivial. c c = p ( p - 1 )xmodccc=p(p1)
Emil Jeřábek
@Emil Jerabek: Terima kasih, ini persis bantuan yang saya butuhkan :)
daniello