{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Factoring Polynomials with SymPy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here is an example that uses [SymPy](http://sympy.org/en/index.html) to factor polynomials."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from ipywidgets import interact"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from sympy import Symbol, Eq, factor"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = Symbol('x')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def factorit(n):\n",
" return Eq(x**n-1, factor(x**n-1))"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"x**12 - 1 == (x - 1)*(x + 1)*(x**2 + 1)*(x**2 - x + 1)*(x**2 + x + 1)*(x**4 - x**2 + 1)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"factorit(12)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": [
"\n",
""
]
},
"metadata": {
"isWidgetSnapshot": true
},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"x**21 - 1 == (x - 1)*(x**2 + x + 1)*(x**6 + x**5 + x**4 + x**3 + x**2 + x + 1)*(x**12 - x**11 + x**9 - x**8 + x**6 - x**4 + x**3 - x + 1)"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"interact(factorit, n=(2,40));"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3+"
},
"widgets": {
"state": {
"77f2062df66e4781a624d87f0e54549d": {
"views": []
},
"8139a32e46e047808fae364be1309f4c": {
"views": []
},
"a9e505fd895a4e0685243e7428a7c6be": {
"views": [
{
"cell": {
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false,
"trusted": true
},
"outputs": [
{
"data": {
"image/png": "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",
"text/html": "\n"
},
"metadata": {
"isWidgetSnapshot": true
},
"output_type": "display_data"
},
{
"data": {
"text/plain": "x**21 - 1 == (x - 1)*(x**2 + x + 1)*(x**6 + x**5 + x**4 + x**3 + x**2 + x + 1)*(x**12 - x**11 + x**9 - x**8 + x**6 - x**4 + x**3 - x + 1)"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": "interact(factorit, n=(2,40));"
},
"cell_index": 7,
"root": true
}
]
},
"b37a5b98616644f4970c9fa8e180e4e5": {
"views": []
}
},
"version": "0.0.1"
}
},
"nbformat": 4,
"nbformat_minor": 1
}