Implémentez la division longue polynomiale, un algorithme qui divise deux polynômes et obtient le quotient et le reste:
(12x ^ 3 - 5x ^ 2 + 3x - 1) / (x ^ 2 - 5) = 12x - 5 R 63x - 26
Dans vos programmes, vous représenterez les polynômes sous forme de tableau, avec le terme constant sur la queue. par exemple, x ^ 5 - 3x ^ 4 + 2x ^ 2 - x + 1 deviendra [1, -3, 0, 2, -1, 1].
La fonction de division longue que vous allez écrire renverra deux valeurs: le quotient et le reste. Vous n'avez pas besoin de gérer les imprécisions numériques et les erreurs arithmétiques. N'utilisez pas la bibliothèque mathématique pour faire votre travail, cependant, vous pouvez rendre votre fonction capable de gérer des valeurs symboliques. Le code le plus court gagne.
EXEMPLE: div([12, -5, 3, -1], [1, 0, -5]) == ([12, -5], [63, -26])
la source
Réponses:
J, 94
par exemple.
Explication de quelques extraits, étant donné que a: (12 -5 3 -1) et b: (1 0 -5)
longueur d'un:
faire un et b même ordre en ajoutant des zéros à b:
diviser les puissances supérieures (premiers éléments) de a, b:
multipliez b par cela et soustrayez-le de a:
répéter n fois b = f (a, b):
la source
Python 2,
260258257255 octetsCela exécute:
Utilisez comme ça:
la source
Haskell, 126
Pour un début:
Exemple d'utilisation:
la source
Javascript avec lambdas, 108
Il remplace le premier argument par rappel et le second par résultat.
Exemple d'utilisation dans Firefox:
Désolé pour le bug. Déjà réparé.
la source