Trouver le reste d'un grand polynôme fixe lorsqu'il est divisé par un petit polynôme inconnu


9

Supposons que nous opérions dans un champ fini. On nous donne un grand polynôme fixe p (x) (de, disons, degré 1000) sur ce champ. Ce polynôme est connu à l'avance et nous sommes autorisés à faire des calculs en utilisant beaucoup de ressources dans la «phase initiale». Ces résultats peuvent être stockés dans des tables de consultation relativement petites.

À la fin de la "phase initiale", on nous donnera un petit polynôme inconnu q (x) (de, disons, degré 5 ou moins).

Existe-t-il un moyen rapide de calculer p (x) mod q (x) étant donné que nous sommes autorisés à faire des calculs compliqués dans la "phase initiale"? Une façon évidente est de calculer p (x) mod q (x) pour toutes les valeurs possibles de q (x). Y a-t-il une meilleure manière de faire cela?

Réponses:


3

Les algorithmes suivants fonctionnent bien si le champ sous-jacent a un très petit ordre .s

Supposons que nous savons que est irréductible, d'un degré fixe d . Ensuite, mod q , nous savons que x s d = x est valable. Il suffit donc de pré-calculer .qdqxsd=xp(x)modxsdx

En général, peut se décomposer en un produit de polynômes irréductibles . Dans ce cas, un argument similaire s'applique au calcul de modulo chaque séparément, puis à l'assemblage des résultats. Nous devons donc vraiment calculer pour chaque .q = q 1q r p q 1 , , q r p ( x )q(x)q=q1qrpq1,,qrd dp(x)modxsdxdd


2

Je pense qu'il existe un moyen assez rapide de le faire. Que les coefficients du polynôme encore inconnu être , alors où est un nombre faible. Commençons maintenant à calculer où , où est grand et les sont connus. Pour ce faire, nous le degré en utilisant des égalités comme . Finalement, ce que nous obtenons est un polynôme degré , dont les coefficients sont des polynômes du (puisque l'b i q = d i = 0 b i x i d pqbiq=i=0dbixidp = D i = 0 a i x i D a i a D x D = - a Dp(modq)p=i=0DaixiDai<d-1biaiqaDxD=aDbdi=1d1bdixDi<d1biaisont connus). Ces polynômes peuvent être calculés rapidement une fois obtenu .q


-1

Voir les excellents commentaires sur ce post ci-dessous. :)


Prétraitement; entrée: p(x)

  1. Facteur comme .p ( x ) = 1000 i = 0 ( x i - r i )p(x)p(x)=i=01000(xiri)

  2. Stockez-le comme une table de racines distinctes et leurs multiplicités respectives .r j m jTrjmj

Phase en ligne; entrée: q(x)

  1. Facteur comme .q ( x ) = 5 i = 0 ( x i - r i )q(x)q(x)=i=05(xiri)

  2. Conservez ceci sous la forme d'une liste de racines distinctes et leurs multiplicités respectives .r j m jLrjmj

  3. Alors que ne soit pas vide, retirez la prochaine racine / multiplicité de et tout comme termes .L TLLT

  4. Lisez dans la table modifiée et sortez. Tp(x)modq(x)T


Autres commentaires:

  • Évidemment, vous voulez trier la table et y accéder avec une recherche binaire (ou un arbre).T
  • (Soit le degré de .) Si vous voulez que la sortie soit en représentation de coefficient, vous pouvez simplement faire un tas de FFT à la fin pour obtenir heure.p ( x ) p ( x ) mod q ( x ) ˜ O ( d )dp(x)p(x)modq(x)O~(d)
  • Selon la façon dont vous l'officialisez, vous pouvez probablement pré-calculer un grand nombre des différentes façons de recombiner les termes en au préalable (style de programmation dynamique), de sorte que la plupart (ou la totalité) des multiplications ne sont que des recherches. Le coût dominant est alors le nombre de recherches, soit environ . Si , ce n'est qu'une poignée d'opérations arithmétiques concrètes.O ( log d ) d = 1000TO(logd)d=1000

2
Dans quel domaine factorisez-vous p? Quelle taille attendez-vous de cette représentation par rapport au champ d'origine? Et quand vous dites de lire à partir de la table et de la sortie modifiées, que voulez-vous dire?
David Eppstein

2
Cela ne fonctionnerait que si vous travaillez sur un champ où et divisent. Mais cela semble dépendre de ; en particulier, vous ne pouvez pas précalculer les racines pour seul. De plus, le calcul des racines de sur un aussi grand champ prendra du temps (au moins); ce n'est pas mieux que l'algorithme naïf. q q p q | p |pqqpq|p|
David Harris
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.