€csage.server.notebook.notebook Notebook q)q}q(U_Notebook__worksheetsq}q(U(csage.server.notebook.worksheet Worksheet qoq}q(U_Worksheet__filenameq U_U_Worksheet__cellsq ]q ((csage.server.notebook.cell Cell q oq }q(U _Cell__inqU2+3qU_Cell__introspect_htmlqU!
qU_Cell__worksheetqhU_Cell__completionsq‰U_Cell__introspectq‰U_Cell__out_htmlqUU	_Cell__idqMU_Cell__is_htmlq‰U_before_preparseqU\os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/0")
2+3qU
_Cell__dirqU"sage_notebook/worksheets/_/cells/0qU
_Cell__outqU
5

qUhas_new_outputq‰U_Cell__versionq KU_Cell__sageq!csage.interfaces.sage0
reduce_load_Sage
q")Rq#U_Cell__typeq$Uwrapq%U_Cell__timeq&‰U_Cell__interruptedq'‰ub(hoq(}q)(U	_Cell__inq*U2+5q+hU!
q,U_Cell__worksheetq-hU_Cell__completionsq.‰h‰U_Cell__out_htmlq/UU	_Cell__idq0Mh‰hU\os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/1")
2+5q1U
_Cell__dirq2U"sage_notebook/worksheets/_/cells/1q3U
_Cell__outq4U
7

q5Uhas_new_outputq6‰U_Cell__versionq7Kh!h#U_Cell__typeq8h%h&‰U_Cell__interruptedq9‰ub(hoq:}q;(h*U$E = magma.EllipticCurve([1,2,3,4,5])qq=h-hh.‰h‰h/Uh0Mh‰hU}os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/2")
E = magma.EllipticCurve([1,2,3,4,5])q>h2U"sage_notebook/worksheets/_/cells/2q?h4U

q@h6‰h7Kh!h#h8h%h&‰h9‰ub(hoqA}qB(h*UEhU!
qCh-hh.‰h‰h/Uh0Mh‰hUZos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/3")
EqDh2U"sage_notebook/worksheets/_/cells/3qEh4UX
Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field

qFh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqG}qH(h*Utype(E)qIhU!
qJh-hh.‰h‰h/Uh0Mh‰hU`os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/4")
type(E)qKh2U"sage_notebook/worksheets/_/cells/4qLh4U/


qMh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqN}qO(h*UE.name()qPhU!
qQh-hh.‰h‰h/Uh0Mh‰hUaos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/5")
E.name()qRh2U"sage_notebook/worksheets/_/cells/5qSh4U
'_sage_[7]'

qTh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqU}qV(h*UE.Rank()qWhU!
qXh-hh.‰h‰h/Uh0Mh‰hUaos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/6")
E.Rank()qYh2U"sage_notebook/worksheets/_/cells/6qZh4U
1

q[h6‰h7Kh!h#h8h%h&‰h9‰ub(hoq\}q](h*Ua = maple('2007')q^hU!
q_h-hh.‰h‰h/Uh0Mh‰hUjos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/7")
a = maple('2007')q`h2U"sage_notebook/worksheets/_/cells/7qah4U

qbh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqc}qd(h*UahU!
qeh-hh.‰h‰h/Uh0Mh‰hUZos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/8")
aqfh2U"sage_notebook/worksheets/_/cells/8qgh4U
2007

qhh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqi}qj(h*Ua.ifactor()qkhU!
qlh-hh.‰h‰h/Uh0M	h‰hUdos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/9")
a.ifactor()qmh2U"sage_notebook/worksheets/_/cells/9qnh4U
``(3)^2*``(223)

qoh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqp}qq(h*Ua.name()qrhU!
qsh-hh.‰h‰h/Uh4U

'sage1'

qth0M
h‰hUbos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/10")
a.name()quh2U#sage_notebook/worksheets/_/cells/10qvU_word_being_completedqwUa.ifacqxh6‰h7Kh!h#h8h%h&‰h9‰ub(hoqy}qz(h*Ufor i in range(5):
    print iq{hU!
q|h-hh.‰h‰h/Uh0Mh‰hUxos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/_/cells/11")
for i in range(5):
    print iq}h2U#sage_notebook/worksheets/_/cells/11q~h4U
0
1
2
3
4

qh6‰h7Kh!h#h8h%h&‰h9‰ub(hoq€}q(h*Uh-hh.‰h/Uh0Mh2U#sage_notebook/worksheets/_/cells/12q‚h4Uh6‰h7Kh8h%h9‰ubeU_Worksheet__synchroqƒKU_Worksheet__comp_is_runningq„‰U_Worksheet__dirq…Usage_notebook/worksheets/_q†U_Worksheet__attachedq‡}qˆU_Worksheet__queueq‰]qŠU_Worksheet__next_idq‹M
U_Worksheet__passcryptqŒˆU_Worksheet__nameqUU_Worksheet__saltqŽU1165187731.576083qU_Worksheet__notebookqhU_Worksheet__idq‘KU_Worksheet__next_block_idq’KU_Worksheet__systemq“NU_Worksheet__passcodeq”U
11G3BJNEUV/Pkq•ubUgraphq–(hoq—}q˜(h	Ugraphq™h
]qš((hoq›}qœ(U	_Cell__inqU*time b = bernoulli(10000, algorithm='gap')qžU_Cell__introspect_htmlqŸU!
q U_Cell__worksheetq¡h—U_Cell__completionsq¢‰U_Cell__introspectq£‰U_Cell__out_htmlq¤UU	_Cell__idq¥M0U_Cell__is_htmlq¦‰U_before_preparseq§U®os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/14")
__SAGE_t__=cputime()
__SAGE_w__=walltime()
b = bernoulli(10000, algorithm='gap')q¨U_word_being_completedq©UbernqªU
_Cell__dirq«U'sage_notebook/worksheets/graph/cells/14q¬U
_Cell__outq­UUhas_new_outputq®‰U_Cell__sageq¯NU_Cell__versionq°KU_Cell__typeq±Uwrapq²U_Cell__timeq³ˆU_Cell__interruptedq´ˆub(hoqµ}q¶(hU+time b = bernoulli(10000, algorithm='pari')q·hŸU!
q¸h¡h—h¢‰h£‰h¤Uh¥M0h¦‰h§U¯os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/15")
__SAGE_t__=cputime()
__SAGE_w__=walltime()
b = bernoulli(10000, algorithm='pari')q¹h«U'sage_notebook/worksheets/graph/cells/15qºh­U'
CPU time: 0.24 s,  Wall time: 0.26 s

q»h®‰h¯h")Rq¼h°Kh±h²h³ˆh´‰ub(hoq½}q¾(hUE = EllipticCurve('389a')q¿hŸU!
qÀh¡h—h¢‰h£‰h¤Uh¥M
0h¦‰h§Uwos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/10")
E = EllipticCurve('389a')qÁh©UEllqÂh«U'sage_notebook/worksheets/graph/cells/10qÃh­U

qÄh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hoqÅ}qÆ(hUL = E.Lseries_zeros(5)qÇhŸU!
qÈh¡h—h¢‰h£‰h¤Uh¥M0h¦‰h§Utos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/11")
L = E.Lseries_zeros(5)qÉh©U
E.Lseries_zerqÊh«U'sage_notebook/worksheets/graph/cells/11qËh­U

qÌh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hoqÍ}qÎ(hULhŸU!
qÏh¡h—h¢‰h£‰h¤Uh¥M0h¦‰h§U_os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/12")
LqÐh«U'sage_notebook/worksheets/graph/cells/12qÑh­UA
[0.000000000, 0.000000000, 2.87609907, 4.41689608, 5.79340263]

qÒh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hoqÓ}qÔ(hUg = graphs.PetersenGraph()qÕU_Cell__introspect_htmlqÖU!
q×hh—h‰U_Cell__introspectq؉hUU_Cell__is_htmlqÙ‰hM0U_word_being_completedqÚU
graphs.PetqÛU_before_preparseqÜUwos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/0")
g = graphs.PetersenGraph()qÝhU&sage_notebook/worksheets/graph/cells/0qÞhU

qßh‰h KU_Cell__sageqàh#h$UwrapqáU_Cell__timeqâ‰h'‰ub(hoqã}qä(hUshow(g)qåhÖU!
qæhh—h‰h؉hU>qçhM0hÙ‰hÜUdos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/1")
show(g)qèhU&sage_notebook/worksheets/graph/cells/1qéhU

qêh‰h Khàh#h$háhâ‰h'‰ub(hoqë}qì(hU(g = graphs.CompleteBipartiteGraph(5,100)qíhU!
qîhh—h‰h‰hUhU

qïhM0h‰hU…os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/2")
g = graphs.CompleteBipartiteGraph(5,100)qðhU&sage_notebook/worksheets/graph/cells/2qñhwUgraphs.CompleteBiqòh‰h Kh!h¼h$h²h&‰h'‰ub(hoqó}qô(h*Ugraphs.CompleteBipartiteGraphqõhT?
File: /Volumes/HOME/s/local/lib/python2.5/site-packages/sage/graphs/graph_database.py
Source Code (starting at line 566):
    def CompleteBipartiteGraph(self, n1, n2):
        """
        Returns a Complete Bipartite Graph sized n1+n2, with each of the
        nodes [0,(n1-1)] connected to each of the nodes [n1,(n2-1)] and
        vice versa.
        
        A Complete Bipartite Graph is a graph with its vertices partitioned
        into two groups, V1 and V2.  Each v in V1 is connected to every v
        in V2, and vice versa.  
        
        PLOTTING:
        Upon construction, the position dictionary is filled to override
        the spring-layout algorithm. By convention, each complete bipartite
        graph will be displayed with the first n1 nodes on the top row (at
        y=1) from left to right.  The remaining n2 nodes appear at y=0,
        also from left to right.  The shorter row (partition with fewer
        nodes) is stretched to the same length as the longer row, unless
        the shorter row has 1 node; in which case it is centered.  The x
        values in the plot are in domain [0,max{n1,n2}].  
                
        In the Complete Bipartite graph, there is a visual difference in
        using the spring-layout algorithm vs. the position dictionary used
        in this constructor.  The position dictionary flattens the graph
        and separates the partitioned nodes, making it clear which nodes
        an edge is connected to.  The Complete Bipartite graph plotted with
        the spring-layout algorithm tends to center the nodes in n1 (see
        spring_med in examples below), thus overlapping its nodes and edges,
        making it typically hard to decipher.
        
        Filling the position dictionary in advance adds O(n) to the
        constructor.  Feel free to race the constructors below in the
        examples section.  The much larger difference is the time added by
        the spring-layout algorithm when plotting.  (Also shown in the
        example below).  The spring model is typically described as O(n^3),
        as appears to be the case in the NetworkX source code.
        
        EXAMPLES:
            # The following examples require NetworkX (to use default)
            sage: import networkx as NX
            
            # Compare the constructors (results will vary)
            sage.: time n = NX.complete_bipartite_graph(389,157); spring_big = Graph(n)
            # CPU time: 9.28 s,  Wall time: 11.02 s
            sage.: time posdict_big = graphs.CompleteBipartiteGraph(389,157)
            # CPU time: 10.72 s,  Wall time: 13.84 s

            # Compare the plotting speeds (results will vary)
            sage: n = NX.complete_bipartite_graph(11,17)
            sage: spring_med = Graph(n)
            sage: posdict_med = graphs.CompleteBipartiteGraph(11,17)
            # Notice here how the spring-layout tends to center the nodes of n1
            sage.: time spring_med.show()
            # CPU time: 3.84 s,  Wall time: 4.49 s
            sage.: time posdict_med.show()
            # CPU time: 0.96 s,  Wall time: 1.14 s

            # View many Complete Bipartite graphs with a SAGE Graphics Array            
            
            # With this constructor (i.e., the position dictionary filled)
            sage: g = []
            sage: j = []
            sage: for i in range(9):
            ...    k = graphs.CompleteBipartiteGraph(i+1,4)
            ...    g.append(k)
            ...
            sage: for i in range(3):
            ...    n = []
            ...    for m in range(3):
            ...        n.append(g[3*i + m].plot(node_size=50, with_labels=False))
            ...    j.append(n)
            ...
            sage: G = sage.plot.plot.GraphicsArray(j)
            sage.: G.show()

            # Compared to plotting with the spring-layout algorithm
            sage: g = []
            sage: j = []
            sage: for i in range(9):
            ...    spr = NX.complete_bipartite_graph(i+1,4)       
            ...    k = Graph(spr)
            ...    g.append(k)
            ...
            sage: for i in range(3):
            ...    n = []
            ...    for m in range(3):
            ...        n.append(g[3*i + m].plot(node_size=50, with_labels=False))
            ...    j.append(n)
            ...
            sage: G = sage.plot.plot.GraphicsArray(j)
            sage.: G.show()
        """
        pos_dict = {}
        c1 = 1 # scaling factor for top row
        c2 = 1 # scaling factor for bottom row
        c3 = 0 # pad to center if top row has 1 node
        c4 = 0 # pad to center if bottom row has 1 node
        if n1 > n2:
            if n2 == 1:
                c4 = (n1-1)/2
            else:
                c2 = ((n1-1)/(n2-1))
        elif n2 > n1:
            if n1 == 1:
                c3 = (n2-1)/2
            else:
                c1 = ((n2-1)/(n1-1))
        for i in range(n1):
            x = c1*i + c3
            y = 1
            pos_dict[i] = [x,y]
        for i in range(n1+n2)[n1:]:
            x = c2*(i-n1) + c4
            y = 0
            pos_dict[i] = [x,y]
        G = NX.complete_bipartite_graph(n1,n2)
        return graph.Graph(G, pos=pos_dict, name="Complete bipartite graph on %d vertices"%(n1+n2))
qöh-h—h.‰h]q÷(Ugraphs.CompleteBipartiteGraph??qøUeh/U>qùh4U qúh0M0h‰hU|os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/3") graphs.CompleteBipartiteGraph??qûh2U&sage_notebook/worksheets/graph/cells/3qühwUgraphs.CompleteBiqýh6‰h7Kh!h#h8h%h&‰h9‰ub(h oqþ}qÿ(hUghŸU!
rh¡h—h¢‰h£‰h¤Uh¥M0h¦‰h§U^os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/5")
grh«U&sage_notebook/worksheets/graph/cells/5rh­UK
Complete bipartite graph on 105 vertices: a simple graph on 105 vertices

rh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hor}r(h*Ug.save('mygraph')rhŸU!
rh-h—h.‰h£‰h/Uh0M0h¦‰h§Unos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/4")
g.save('mygraph')rh2U&sage_notebook/worksheets/graph/cells/4r	h4U

r
h6‰h¯h¼h7Kh8h²h³‰h9‰ub(hor}r(hU5P = plot(sin, 0, 10, rgbcolor=(0,0.5,0), thickness=5)r
hŸU!
rh¡h—h¢‰h£‰h¤Uh¥M0h¦‰h§U’os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/6")
P = plot(sin, 0, 10, rgbcolor=(0,0.5,0), thickness=5)rh«U&sage_notebook/worksheets/graph/cells/6rh­U

rh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hor}r(hUPhŸU!
rh¡h—h¢‰h£‰h¤Uh¥M0h¦‰h§U^os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/7")
Prh«U&sage_notebook/worksheets/graph/cells/7rh­U5
Graphics object consisting of 1 graphics primitive

rh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hor}r(hUP.show()rhŸU!
rh¡h—h¢‰h£‰h¤U>rh¥M0h¦‰h§Ueos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/graph/cells/8")
P.show()rh«U&sage_notebook/worksheets/graph/cells/8rh­U

rh®‰h¯h¼h°Kh±h²h³‰h´‰ub(hor }r!(hUh¡h—h¢‰h¤Uh¥M	0h«U&sage_notebook/worksheets/graph/cells/9r"h­Uh®‰h°Kh±h²h´‰ubeU_Worksheet__synchror#Kr;hj4h‰h؉hUhÙ‰hM hÚUbernoulli_mor<hÜUwos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/bernoull_mod/cells/0")
bernoulli_mod_p(37)r=hU-sage_notebook/worksheets/bernoull_mod/cells/0r>hUF
[1, 31, 16, 15, 16, 4, 17, 32, 22, 31, 15, 15, 17, 12, 29, 2, 0, 2]

r?h‰h KU_Cell__sager@h#h$háhâ‰h'‰ub(horA}rB(U	_Cell__inrCU)time v=bernoulli_mod_p(next_prime(50000))rDU_Cell__introspect_htmlrEU!
rFU_Cell__worksheetrGj4U_Cell__completionsrH‰U_Cell__introspectrI‰U_Cell__out_htmlrJUU_Cell__is_htmlrK‰U	_Cell__idrLM U_word_being_completedrMUbernoulli_morNU_before_preparserOU³os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/bernoull_mod/cells/1")
__SAGE_t__=cputime()
__SAGE_w__=walltime()
v=bernoulli_mod_p(next_prime(50000))rPU
_Cell__dirrQU-sage_notebook/worksheets/bernoull_mod/cells/1rRU
_Cell__outrSU'
CPU time: 0.44 s,  Wall time: 0.47 s

rTUhas_new_outputrU‰U_Cell__versionrVKj@h#U_Cell__typerWháU_Cell__timerXˆU_Cell__interruptedrY‰ub(horZ}r[(jCUlen(v)r\jEU!
r]jGj4jH‰jI‰jJUjLM jK‰jOUjos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/bernoull_mod/cells/2")
len(v)r^jQU-sage_notebook/worksheets/bernoull_mod/cells/2r_jSU
25010

r`jU‰jVKj@h#jWhájX‰jY‰ub(hora}rb(jCUjGj4jH‰jJUjLM jQU-sage_notebook/worksheets/bernoull_mod/cells/4rcjSUjU‰jVKjWhájY‰ubej#K
h„‰h‡}rdh…U%sage_notebook/worksheets/bernoull_modreh‰]rfh‹M hŒˆhUbernoull_modrghŽU1165187752.734722rhhhh‘Kj1Kh“Nh”U
11G3BJNEUV/PkriubUfactorrj(hork}rl(U_Worksheet__filenamermUfactorrnU_Worksheet__cellsro]rp((horq}rr(U	_Cell__inrsUU_Cell__worksheetrtjkU_Cell__completionsru‰U_Cell__out_htmlrvUU	_Cell__idrwM@U
_Cell__dirrxU'sage_notebook/worksheets/factor/cells/8ryU
_Cell__outrzUUhas_new_outputr{‰U_Cell__versionr|KU_Cell__typer}Uwrapr~U_Cell__interruptedr‰ub(hor€}r(jsT%hide%html

Factor Tree Worksheet

This worksheet uses the SAGE Notebook to illustrate integer factorization as a product of primes using the ``factor trees'' that students learn about in school.r‚jtjkju‰jvUjwM@jxU'sage_notebook/worksheets/factor/cells/1rƒjzT 

Factor Tree Worksheet

This worksheet uses the SAGE Notebook to illustrate integer factorization as a product of primes using the ``factor trees'' that students learn about in school.
r„j{‰j|KU _Cell__sager…Nj}j~j‰ub(h or†}r‡(jsTÄ%hide print "CLICK ABOVE FOR THE SOURCE CODE" # The source code to draw factorization trees... import random def factor_tree(n, font=10): rows = [] v = [(n,None,0)] ftree(rows, v, 0, factor(n)) return draw_ftree(rows, font) def ftree(rows, v, i, F): if len(v) > 0: # add a row to g at the ith level. rows.append(v) w = [] for i in range(len(v)): k, _,_ = v[i] if k is None or is_prime(k): w.append((None,None,None)) else: d = random.choice(divisors(k)[1:-1]) w.append((d,k,i)) e = k//d if e == 1: w.append((None,None)) else: w.append((e,k,i)) if len(w) > len(v): ftree(rows, w, i+1, F) def draw_ftree(rows,font): g = Graphics() for i in range(len(rows)): cur = rows[i] for j in range(len(cur)): e, f, k = cur[j] if not e is None: if is_prime(e): c = (1,0,0) else: c = (0,0,.4) g += text(str(e), (j*2-len(cur),-i), fontsize=font, rgbcolor=c) if not k is None and not f is None: g += line([(j*2-len(cur),-i), (k*2-len(rows[i-1]),-i+1)], alpha=0.4, thickness=1) return g def factor_trees(n, cols=4, rows=3, font=10): return graphics_array([[factor_tree(n,font) for _ in range(cols)] for _ in range(rows)])rˆU_Cell__introspect_htmlr‰U!
rŠjtjkju‰U_Cell__introspectr‹‰jvUjwM@U_Cell__timerŒ‰U_Cell__is_htmlr‰U_before_preparserŽT"os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/factor/cells/2")
%hide
print "CLICK ABOVE FOR THE SOURCE CODE"
# The source code to draw factorization trees...

import random

def factor_tree(n, font=10):
    rows = []
    v = [(n,None,0)]
    ftree(rows, v, 0, factor(n))
    return draw_ftree(rows, font)

def ftree(rows, v, i, F):
    if len(v) > 0:
        # add a row to g at the ith level. 
        rows.append(v)
    w = []
    for i in range(len(v)):
        k, _,_ = v[i]
        if k is None or is_prime(k):
            w.append((None,None,None))
        else:
            d = random.choice(divisors(k)[1:-1])
            w.append((d,k,i))
            e = k//d
            if e == 1:
                w.append((None,None))
            else:
                w.append((e,k,i))
    if len(w) > len(v):
        ftree(rows, w, i+1, F)


def draw_ftree(rows,font):
    g = Graphics()
    for i in range(len(rows)):
        cur = rows[i]
        for j in range(len(cur)):
            e, f, k = cur[j]
            if not e is None:
                if is_prime(e):
                     c = (1,0,0)
                else:
                     c = (0,0,.4)
                g += text(str(e), (j*2-len(cur),-i), fontsize=font, rgbcolor=c)
                if not k is None and not f is None:
                    g += line([(j*2-len(cur),-i), (k*2-len(rows[i-1]),-i+1)], alpha=0.4, thickness=1) 
    return g

def factor_trees(n, cols=4, rows=3, font=10):
    return graphics_array([[factor_tree(n,font) for _ in range(cols)] for _ in range(rows)])rjxU'sage_notebook/worksheets/factor/cells/2rjzU"
CLICK ABOVE FOR THE SOURCE CODE

r‘j{‰j|Kj…h#j}háj‰ub(hor’}r“(jsUVF = factor_trees(300000000, rows=1, cols=1, font=8)
F.show(axes=False, figsize=[10,6])r”j‰U!
r•jtjkju‰j‹‰jvU?r–jwM@jŒ‰j‰jŽU´os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/factor/cells/3")
F = factor_trees(300000000, rows=1, cols=1, font=8)
F.show(axes=False, figsize=[10,6])r—jxU'sage_notebook/worksheets/factor/cells/3r˜jzU

r™j{‰j|Kj…h#j}háj‰ub(horš}r›(jsUbF = factor_tree(prod(primes(40)))
F.show(xmin=-3,xmax=7,ymin=-5,ymax=0.5,figsize=[8,2],axes=False)rœj‰U!
rjtjkju‰j‹‰jvU?ržjwM@jŒ‰j‰jŽUÀos.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/factor/cells/4")
F = factor_tree(prod(primes(40)))
F.show(xmin=-3,xmax=7,ymin=-5,ymax=0.5,figsize=[8,2],axes=False)rŸjxU'sage_notebook/worksheets/factor/cells/4r jzU

r¡j{‰j|Kj…h#j}háj‰ub(hor¢}r£(jsU9show(factor_trees(1200,cols=3,rows=3),axes=False,dpi=100)r¤j‰U!
r¥jtjkju‰j‹‰jvU?r¦jwM@jŒ‰j‰jŽU—os.chdir("/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/worksheets/factor/cells/5")
show(factor_trees(1200,cols=3,rows=3),axes=False,dpi=100)r§jxU'sage_notebook/worksheets/factor/cells/5r¨jzU

r©j{‰j|Kj…h#j}j~j‰ubeU_Worksheet__synchrorªK
U_Worksheet__comp_is_runningr«‰U_Worksheet__attachedr¬}r­U_Worksheet__dirr®Usage_notebook/worksheets/factorr¯U_Worksheet__queuer°]r±U_Worksheet__next_idr²M
@U_Worksheet__passcryptr³ˆU_Worksheet__namer´UfactorrµU_Worksheet__saltr¶U1165225547.833440r·U_Worksheet__notebookr¸hU_Worksheet__idr¹KU_Worksheet__next_block_idrºKU_Worksheet__systemr»NU_Worksheet__passcoder¼U
11G3BJNEUV/Pkr½ubUtestr¾(hor¿}rÀ(U_Worksheet__filenamerÁUtestrÂU_Worksheet__cellsrÃ]rÄ(horÅ}rÆ(jCUjGj¿jH‰jJUjLMPjQU%sage_notebook/worksheets/test/cells/0rÇjSUjU‰jVKjWhájY‰ubaU_Worksheet__namerÈUtestrÉU_Worksheet__attachedrÊ}rËU_Worksheet__dirrÌUsage_notebook/worksheets/testrÍU_Worksheet__queuerÎ]rÏU_Worksheet__next_idrÐMPU_Worksheet__passcryptrшU_Worksheet__comp_is_runningrÒ‰U_Worksheet__saltrÓU1165250401.859302rÔU_Worksheet__notebookrÕhU_Worksheet__idrÖKU_Worksheet__systemr×NU_Worksheet__passcoderØU
11G3BJNEUV/PkrÙubU	_scratch_rÚ(horÛ}rÜ(h	U	_scratch_rÝh
]rÞ(horß}rà(hUhjÛh‰hKhU*sage_notebook/worksheets/_scratch_/cells/0ráhUh‰h Kh'‰ubah„‰h…U"sage_notebook/worksheets/_scratch_râh”U
11G3BJNEUV/Pkrãh‰]räh‹KhŒˆhU	_scratch_råhŽU1165187727.127047ræhhh‘Kh“NubuU_Notebook__historyrç]rè(U¨# Worksheet 'graph' (2006-12-03 at 15:35)
sage: g = graphs.StarGraph()
Traceback (most recent call last):
...
TypeError: StarGraph() takes exactly 2 arguments (1 given)réUK# Worksheet 'graph' (2006-12-03 at 15:35)
sage: g = graphs.PetersenGraph()
rêU8# Worksheet 'graph' (2006-12-03 at 15:35)
sage: show(g)
rëT¶# Worksheet 'factor' (2006-12-04 at 01:46)
sage: %hide
sage: print "CLICK ABOVE FOR THE SOURCE CODE"
sage: # The source code to draw factorization trees...
sage: import random
sage: def factor_tree(n, font=10):
...    rows = []
...    v = [(n,None,0)]
...    ftree(rows, v, 0, factor(n))
...    return draw_ftree(rows, font)
...
sage: def ftree(rows, v, i, F):
...    if len(v) > 0:
...        # add a row to g at the ith level. 
...        rows.append(v)
...    w = []
...    for i in range(len(v)):
...        k, _,_ = v[i]
...        if k is None or is_prime(k):
...            w.append((None,None,None))
...        else:
...            d = random.choice(divisors(k)[1:-1])
...            w.append((d,k,i))
...            e = k//d
...            if e == 1:
...                w.append((None,None))
...            else:
...                w.append((e,k,i))
...    if len(w) > len(v):
...        ftree(rows, w, i+1, F)
...
sage: def draw_ftree(rows,font):
...    g = Graphics()
...    for i in range(len(rows)):
...        cur = rows[i]
...        for j in range(len(cur)):
...            e, f, k = cur[j]
...            if not e is None:
...                if is_prime(e):
...                     c = (1,0,0)
...                else:
...                     c = (0,0,.4)
...                g += text(str(e), (j*2-len(cur),-i), fontsize=font, rgbcolor=c)
...                if not k is None and not f is None:
...                    g += line([(j*2-len(cur),-i), (k*2-len(rows[i-1]),-i+1)], alpha=0.4, thickness=0.4) 
...    return g
...
sage: def factor_trees(n, cols=4, rows=3, font=10):
...    return graphics_array([[factor_tree(n,font) for _ in range(cols)] for _ in range(rows)])
CLICK ABOVE FOR THE SOURCE CODErìUŽ# Worksheet 'factor' (2006-12-04 at 01:46)
sage: F = factor_trees(300000000, rows=1, cols=1, font=8)
sage: F.show(axes=False, figsize=[10,6])
ríUš# Worksheet 'factor' (2006-12-04 at 01:46)
sage: F = factor_tree(prod(primes(30)))
sage: F.show(xmin=-3,xmax=7,ymin=-5,ymax=0.5,figsize=[8,2],axes=False)
rîUk# Worksheet 'factor' (2006-12-04 at 01:46)
sage: show(factor_trees(1200,cols=3,rows=3),axes=False,dpi=100)
rïU,# Worksheet 'factor' (2006-12-04 at 01:46)

rðU,# Worksheet 'factor' (2006-12-04 at 01:46)

rñUK# Worksheet 'graph' (2006-12-04 at 08:38)
sage: g = graphs.PetersenGraph()
ròU8# Worksheet 'graph' (2006-12-04 at 08:38)
sage: show(g)
róUK# Worksheet 'graph' (2006-12-04 at 08:38)
sage: g = graphs.PetersenGraph()
rôU8# Worksheet 'graph' (2006-12-04 at 08:38)
sage: show(g)
rõT´# Worksheet 'factor' (2006-12-04 at 08:38)
sage: %hide
sage: print "CLICK ABOVE FOR THE SOURCE CODE"
sage: # The source code to draw factorization trees...
sage: import random
sage: def factor_tree(n, font=10):
...    rows = []
...    v = [(n,None,0)]
...    ftree(rows, v, 0, factor(n))
...    return draw_ftree(rows, font)
...
sage: def ftree(rows, v, i, F):
...    if len(v) > 0:
...        # add a row to g at the ith level. 
...        rows.append(v)
...    w = []
...    for i in range(len(v)):
...        k, _,_ = v[i]
...        if k is None or is_prime(k):
...            w.append((None,None,None))
...        else:
...            d = random.choice(divisors(k)[1:-1])
...            w.append((d,k,i))
...            e = k//d
...            if e == 1:
...                w.append((None,None))
...            else:
...                w.append((e,k,i))
...    if len(w) > len(v):
...        ftree(rows, w, i+1, F)
...
sage: def draw_ftree(rows,font):
...    g = Graphics()
...    for i in range(len(rows)):
...        cur = rows[i]
...        for j in range(len(cur)):
...            e, f, k = cur[j]
...            if not e is None:
...                if is_prime(e):
...                     c = (1,0,0)
...                else:
...                     c = (0,0,.4)
...                g += text(str(e), (j*2-len(cur),-i), fontsize=font, rgbcolor=c)
...                if not k is None and not f is None:
...                    g += line([(j*2-len(cur),-i), (k*2-len(rows[i-1]),-i+1)], alpha=0.4, thickness=1) 
...    return g
...
sage: def factor_trees(n, cols=4, rows=3, font=10):
...    return graphics_array([[factor_tree(n,font) for _ in range(cols)] for _ in range(rows)])
CLICK ABOVE FOR THE SOURCE CODEröUŽ# Worksheet 'factor' (2006-12-04 at 08:38)
sage: F = factor_trees(300000000, rows=1, cols=1, font=8)
sage: F.show(axes=False, figsize=[10,6])
r÷Uš# Worksheet 'factor' (2006-12-04 at 08:38)
sage: F = factor_tree(prod(primes(30)))
sage: F.show(xmin=-3,xmax=7,ymin=-5,ymax=0.5,figsize=[8,2],axes=False)
røUš# Worksheet 'factor' (2006-12-04 at 08:39)
sage: F = factor_tree(prod(primes(40)))
sage: F.show(xmin=-3,xmax=7,ymin=-5,ymax=0.5,figsize=[8,2],axes=False)
rùUš# Worksheet 'factor' (2006-12-04 at 08:39)
sage: F = factor_tree(prod(primes(40)))
sage: F.show(xmin=-3,xmax=7,ymin=-5,ymax=0.5,figsize=[8,2],axes=False)
rúUŽ# Worksheet 'bernoull_mod' (2006-12-04 at 08:43)
sage: bernoulli_mod_p(37)
[1, 31, 16, 15, 16, 4, 17, 32, 22, 31, 15, 15, 17, 12, 29, 2, 0, 2]rûU„# Worksheet 'bernoull_mod' (2006-12-04 at 08:43)
sage: time v=bernoulli_mod_p(next_prime(5000))
CPU time: 0.03 s,  Wall time: 0.07 srüUB# Worksheet 'bernoull_mod' (2006-12-04 at 08:44)
sage: len(v)
2501rýT# Worksheet 'bernoull_mod' (2006-12-04 at 08:44)
sage: v
[1, 834, 2835, 2978, 2835, 3108, 2285, 835, 4888, 2243, 4580, 2458, 756, 496, 1317, 2489, 3478, 4680, 3187, 2262, 2324, 4505, 4911, 2558, 4545, 905, 8, 377, 3917, 4639, 3600, 117, 2518, 229, 2505, 1860, 1165, 3868, 1535, 3272, 3541, 2424, 2600, 4612, 4701, 2935, 709, 2363, 2790, 1538, 1367, 1803, 2090, 4292, 3056, 2545, 2590, 1578, 1042, 3748, 1051, 3430, 125, 3684, 1830, 3890, 3630, 2170, 4351, 50, 2361, 3842, 1265, 2985, 3199, 11, 4662, 2269, 833, 2141, ...rþU…# Worksheet 'bernoull_mod' (2006-12-04 at 08:44)
sage: time v=bernoulli_mod_p(next_prime(50000))
CPU time: 0.44 s,  Wall time: 0.47 srÿUC# Worksheet 'bernoull_mod' (2006-12-04 at 08:44)
sage: len(v)
25010rUŽ# Worksheet 'bernoull_mod' (2006-12-04 at 08:44)
sage: bernoulli_mod_p(37)
[1, 31, 16, 15, 16, 4, 17, 32, 22, 31, 15, 15, 17, 12, 29, 2, 0, 2]rU0# Worksheet '' (2006-12-04 at 13:44)
sage: 2+3
5rU0# Worksheet '' (2006-12-04 at 13:44)
sage: 2+5
7rUP# Worksheet '' (2006-12-04 at 13:44)
sage: E = magma.EllipticCurve([1,2,3,4,5])
rU‚# Worksheet '' (2006-12-04 at 13:44)
sage: E
Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational FieldrU_# Worksheet '' (2006-12-04 at 13:44)
sage: type(E)
rU?# Worksheet '' (2006-12-04 at 13:45)
sage: E.name()
'_sage_[7]'rU5# Worksheet '' (2006-12-04 at 13:45)
sage: E.Rank()
1rU<# Worksheet '' (2006-12-04 at 13:45)
sage: a = maple('2+3')
r	U.# Worksheet '' (2006-12-04 at 13:45)
sage: a
5r
U=# Worksheet '' (2006-12-04 at 13:46)
sage: a = maple('2007')
rU1# Worksheet '' (2006-12-04 at 13:46)
sage: a
2007rUF# Worksheet '' (2006-12-04 at 13:46)
sage: a.ifactor()
``(3)^2*``(223)r
U;# Worksheet '' (2006-12-04 at 13:46)
sage: a.name()
'sage1'rUV# Worksheet '' (2006-12-04 at 13:47)
sage: for i in range(5):
...    print i
0
1
2
3
4rUY# Worksheet 'graph' (2006-12-04 at 14:09)
sage: g = graphs.CompleteBipartiteGraph(5,100)
rU8# Worksheet 'graph' (2006-12-04 at 14:09)
sage: show(g)
rU{# Worksheet 'graph' (2006-12-04 at 14:16)
sage: g
Traceback (most recent call last):
...
NameError: name 'g' is not definedrUY# Worksheet 'graph' (2006-12-04 at 14:16)
sage: g = graphs.CompleteBipartiteGraph(5,100)
rUz# Worksheet 'graph' (2006-12-04 at 14:16)
sage: g
Complete bipartite graph on 105 vertices: a simple graph on 105 verticesrUB# Worksheet 'graph' (2006-12-04 at 14:16)
sage: g.save('mygraph')
rUW# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P = plot(sin, 0, 10, rgbcolor=(1,1,0))
rUd# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P
Graphics object consisting of 1 graphics primitiverU9# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P.show()
rUY# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P = plot(sin, 0, 10, rgbcolor=(0,0.5,0))
rUd# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P
Graphics object consisting of 1 graphics primitiverU9# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P.show()
rUf# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P = plot(sin, 0, 10, rgbcolor=(0,0.5,0), thickness=5)
rUd# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P
Graphics object consisting of 1 graphics primitiverU9# Worksheet 'graph' (2006-12-04 at 14:18)
sage: P.show()
rU™# Worksheet 'graph' (2006-12-04 at 14:25)
sage: bernoulli(100)
-94598037819122125295227433069493721872702841533066936133385696204311395415197247711/33330rUJ# Worksheet 'graph' (2006-12-04 at 14:25)
sage: E = EllipticCurve('389a')
r UG# Worksheet 'graph' (2006-12-04 at 14:25)
sage: L = E.Lseries_zeros(2)
r!UL# Worksheet 'graph' (2006-12-04 at 14:25)
sage: L
[0.000000000, 0.000000000]r"UG# Worksheet 'graph' (2006-12-04 at 14:25)
sage: L = E.Lseries_zeros(5)
r#Up# Worksheet 'graph' (2006-12-04 at 14:26)
sage: L
[0.000000000, 0.000000000, 2.87609907, 4.41689608, 5.79340263]r$U~# Worksheet 'graph' (2006-12-04 at 14:27)
sage: time b = bernoulli(1000, algorithm='gap')
CPU time: 0.06 s,  Wall time: 4.59 sr%U~# Worksheet 'graph' (2006-12-04 at 14:27)
sage: time b = bernoulli(1000, algorithm='gap')
CPU time: 0.01 s,  Wall time: 0.01 sr&U~# Worksheet 'graph' (2006-12-04 at 14:27)
sage: time b = bernoulli(1002, algorithm='gap')
CPU time: 0.02 s,  Wall time: 0.03 sr'U€# Worksheet 'graph' (2006-12-04 at 14:28)
sage: time b = bernoulli(10000, algorithm='pari')
CPU time: 0.44 s,  Wall time: 0.48 sr(U€# Worksheet 'graph' (2006-12-04 at 14:28)
sage: time b = bernoulli(10000, algorithm='pari')
CPU time: 0.24 s,  Wall time: 0.27 sr)U€# Worksheet 'graph' (2006-12-04 at 14:28)
sage: time b = bernoulli(10000, algorithm='pari')
CPU time: 0.24 s,  Wall time: 0.26 sr*U€# Worksheet 'graph' (2006-12-04 at 14:28)
sage: time b = bernoulli(10000, algorithm='pari')
CPU time: 0.24 s,  Wall time: 0.26 sr+eU_Notebook__defaultsr,}r-(Ucell_output_colorr.U#0000EEr/Umax_history_lengthr0MôUcell_input_colorr1U#0000000r2Uword_wrap_colsr3KPuU_Notebook__worksheet_dirr4Usage_notebook/worksheetsr5U_Notebook__history_countr6KU_Notebook__log_serverr7‰U_Notebook__filenamer8Usage_notebook/nb.sobjr9U_Notebook__default_worksheetr:jÛU_Notebook__server_logr;]r<U_Notebook__next_worksheet_idr=KU_Notebook__kill_idler>KU_Notebook__systemr?NU_Notebook__show_debugr@‰U_Notebook__dirrAU
sage_notebookrBU_Notebook__authrCU:U_Notebook__colorrDNU_Notebook__object_dirrEUsage_notebook/objectsrFU_default_filenamerGU?/Volumes/HOME/talks/2006-12-waterloo/sage/sage_notebook/nb.sobjrHU_Notebook__splashpagerIˆub.