<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Felix&#039; Math Place &#187; lattice determination</title>
	<atom:link href="http://math.fontein.de/tag/lattice-determination/feed/" rel="self" type="application/rss+xml" />
	<link>http://math.fontein.de</link>
	<description>Focussed on, but not limited to Computational Number Theory</description>
	<lastBuildDate>Sat, 30 Jul 2011 12:35:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Finding Lattice Points, Finite Abelian Groups, and Explaining Algorithms.</title>
		<link>http://math.fontein.de/2010/01/29/finding-lattice-points-finite-abelian-groups-and-explaining-algorithms/</link>
		<comments>http://math.fontein.de/2010/01/29/finding-lattice-points-finite-abelian-groups-and-explaining-algorithms/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 10:20:34 +0000</pubDate>
		<dc:creator>Felix Fontein</dc:creator>
				<category><![CDATA[Algebra]]></category>
		<category><![CDATA[Computational Number Theory]]></category>
		<category><![CDATA[algorithms]]></category>
		<category><![CDATA[finite abelian group]]></category>
		<category><![CDATA[group structure]]></category>
		<category><![CDATA[lattice determination]]></category>

		<guid isPermaLink="false">http://math.fontein.de/?p=627</guid>
		<description><![CDATA[We compare the tasks of finding points of a lattice, computing the structure of finite abelian groups and explaining algorithms. We show up relations between these three topics and, as an example, depict the baby-step giant-step algorithm for order computation, as well as Terr's modification of this algorithm.]]></description>
			<content:encoded><![CDATA[<p>In this article, I want to discuss three questions, which turn out to be closely related. The first question is,</p>
<blockquote><p>&ldquo;Given a lattice <img src='http://math.fontein.de/wp-content/latex/84c/84c6b06508e5935e9c33248dc8a7d3cb-T-000000-0.png' alt='\Lambda \subseteq \R^n' title='\Lambda \subseteq \R^n' class='latex-inline' />. How do I find a basis of this lattice?&rdquo;</p></blockquote>
<p>(Note that this question is far from being well-posed.) The second question is,</p>
<blockquote><p>&ldquo;If <img src='http://math.fontein.de/wp-content/latex/dfc/dfcf28d0734569a6a693bc8194de62bf-T-000000-0.png' alt='G' title='G' class='latex-inline' /> is a finite abelian group and <img src='http://math.fontein.de/wp-content/latex/f17/f17e7dec61272f8beca1d2b590453d27-T-000000-0.png' alt='g_1, \dots, g_n \in G' title='g_1, \dots, g_n \in G' class='latex-inline' />, how do I compute the structure of <img src='http://math.fontein.de/wp-content/latex/52a/52a37df685c65d74f3f98cc2e5c23f57-T-000000-0.png' alt='\langle g_1, \dots, g_n \rangle' title='\langle g_1, \dots, g_n \rangle' class='latex-inline' />, the subgroup generated by these elements?&rdquo;</p></blockquote>
<p>The third question comes up in the description of algorithms, for example of the <a href="http://math.fontein.de/forward.php?r=http://en.wikipedia.org/wiki/Baby-step_giant-step">baby-step giant-step</a> algorithm by D. Shanks, an optimization by D. Terr, and more general algorithms, like the <a href="http://math.fontein.de/forward.php?r=http://www.ams.org/mcom/2005-74-252/S0025-5718-05-01740-0/home.html">Buchmann-Schmidt</a> algorithm. These algorithms can be described in terms of the first question, making them easier to understand.</p>
<p>We begin with sketching the relation between lattices and finite abelian groups. If <img src='http://math.fontein.de/wp-content/latex/dfc/dfcf28d0734569a6a693bc8194de62bf-T-000000-0.png' alt='G' title='G' class='latex-inline' /> is a finite abelian group, and <img src='http://math.fontein.de/wp-content/latex/f17/f17e7dec61272f8beca1d2b590453d27-T-000000-0.png' alt='g_1, \dots, g_n \in G' title='g_1, \dots, g_n \in G' class='latex-inline' /> some elements, for example, a set of generators, consider the map <img src='http://math.fontein.de/wp-content/latex/2f5/2f5fdfce04daf61e8089083b4e307d3d-T-000000-0.png' alt='\displaystyle  \Psi_{(g_1, \dots, g_n)} : \Z^n \to G, \qquad (\lambda_1, \dots, \lambda_n) \mapsto \sum_{i=1}^n \lambda_i g_i. ' title='\displaystyle  \Psi_{(g_1, \dots, g_n)} : \Z^n \to G, \qquad (\lambda_1, \dots, \lambda_n) \mapsto \sum_{i=1}^n \lambda_i g_i. ' class='latex-displaystyle' /> This turns out to be a group homomorphism onto <img src='http://math.fontein.de/wp-content/latex/52a/52a37df685c65d74f3f98cc2e5c23f57-T-000000-0.png' alt='\langle g_1, \dots, g_n \rangle' title='\langle g_1, \dots, g_n \rangle' class='latex-inline' />. The kernel of <img src='http://math.fontein.de/wp-content/latex/3ea/3eaa2834f9099fa44579c36b5394cb99-T-000000-0.png' alt='\Psi_{(g_1, \dots, g_n)}' title='\Psi_{(g_1, \dots, g_n)}' class='latex-inline' />, which we will denote by <img src='http://math.fontein.de/wp-content/latex/81f/81f48659c64fdae6101495d50b2282f5-T-000000-0.png' alt='\Lambda_{(g_1, \dots, g_n)}' title='\Lambda_{(g_1, \dots, g_n)}' class='latex-inline' />, is called the <i>relation lattice</i>. This is in fact a lattice in <img src='http://math.fontein.de/wp-content/latex/bc1/bc11cf658715d130a37ac60ac17afb52-T-000000-0.png' alt='\R^n' title='\R^n' class='latex-inline' /> of volume <img src='http://math.fontein.de/wp-content/latex/c62/c623db37c5d3ce7e55f5eceacd400231-T-000000-0.png' alt='\displaystyle  \det \Lambda_{(g_1, \dots, g_n)} = \abs{\Z^n / \Lambda_{(g_1, \dots, g_n)}} = \abs{\langle g_1, \dots, g_n\rangle}; ' title='\displaystyle  \det \Lambda_{(g_1, \dots, g_n)} = \abs{\Z^n / \Lambda_{(g_1, \dots, g_n)}} = \abs{\langle g_1, \dots, g_n\rangle}; ' class='latex-displaystyle' /> note that by the Homomorphism Theorem, <img src='http://math.fontein.de/wp-content/latex/d31/d31840f5c50bbb8a64ff23b5c3b64659-T-000000-0.png' alt='\langle g_1, \dots, g_n \rangle \cong \Z^n / \Lambda_{(g_1, \dots, g_n)}' title='\langle g_1, \dots, g_n \rangle \cong \Z^n / \Lambda_{(g_1, \dots, g_n)}' class='latex-inline' />. On the other hand, if <img src='http://math.fontein.de/wp-content/latex/988/988ff617b34da610134b40b43485ba9c-T-000000-0.png' alt='\Lambda \subseteq \Z^n' title='\Lambda \subseteq \Z^n' class='latex-inline' /> is a lattice, then <img src='http://math.fontein.de/wp-content/latex/0a5/0a5206de58e67ac8d639eb0d1ec8cfed-T-000000-0.png' alt='G := \Z^n / \Lambda' title='G := \Z^n / \Lambda' class='latex-inline' /> is a finite abelian group of <img src='http://math.fontein.de/wp-content/latex/0ae/0ae540f73bef792cc9a12983573b4805-T-000000-0.png' alt='\det G' title='\det G' class='latex-inline' /> elements. Moreover, if the residue class of <img src='http://math.fontein.de/wp-content/latex/8de/8dec559e201a7b6a0f99baeaa1731051-T-000000-0.png' alt='e_i' title='e_i' class='latex-inline' />, the vector consisting of zeroes except a one at the <img src='http://math.fontein.de/wp-content/latex/865/865c0c0b4ab0e063e5caa3387c1a8741-T-000000-0.png' alt='i' title='i' class='latex-inline' />-th position, in <img src='http://math.fontein.de/wp-content/latex/dfc/dfcf28d0734569a6a693bc8194de62bf-T-000000-0.png' alt='G' title='G' class='latex-inline' /> is denoted by <img src='http://math.fontein.de/wp-content/latex/91d/91d8947f9447751708c1f4107beb7ab3-T-000000-0.png' alt='g_i' title='g_i' class='latex-inline' />, then <img src='http://math.fontein.de/wp-content/latex/b7e/b7eaa5d7a6cb90b0a323bad1cd64238c-T-000000-0.png' alt='\Lambda = \Lambda_{(g_1, \dots, g_n)}' title='\Lambda = \Lambda_{(g_1, \dots, g_n)}' class='latex-inline' />. Therefore, lattices in <img src='http://math.fontein.de/wp-content/latex/2af/2afa72d9ef584a2535c844f1305558c4-T-000000-0.png' alt='\Z^n' title='\Z^n' class='latex-inline' /> and finite abelian groups with <img src='http://math.fontein.de/wp-content/latex/7b8/7b8b965ad4bca0e41ab51de7b31363a1-T-000000-0.png' alt='n' title='n' class='latex-inline' /> generators are essentially the same thing.</p>
<p>How is this related to group structure computations? Recall the <a href="http://math.fontein.de/forward.php?r=http://en.wikipedia.org/wiki/Smith_normal_form">Smith normal form</a>; this allows to convert a basis <img src='http://math.fontein.de/wp-content/latex/7dc/7dc04ce08f7195214b255d131b97da59-T-000000-0.png' alt='(v_1, \dots, v_n)' title='(v_1, \dots, v_n)' class='latex-inline' /> of a lattice <img src='http://math.fontein.de/wp-content/latex/781/781ff4289c6cc5fc2973b7a57791e0e2-T-000000-0.png' alt='\Lambda' title='\Lambda' class='latex-inline' /> into another basis, such that if one applies an invertible linear transformation to <img src='http://math.fontein.de/wp-content/latex/2af/2afa72d9ef584a2535c844f1305558c4-T-000000-0.png' alt='\Z^n' title='\Z^n' class='latex-inline' />, this basis is sent to <img src='http://math.fontein.de/wp-content/latex/823/8231dc1ea1cf9ae18add84e5f7852b80-T-000000-0.png' alt='\lambda_1 e_1, \dots, \lambda_n e_n' title='\lambda_1 e_1, \dots, \lambda_n e_n' class='latex-inline' /> with <img src='http://math.fontein.de/wp-content/latex/501/50150cdf9a292ac8f6b3aff4a6a75719-T-000000-0.png' alt='\lambda_i \in \N_{&gt;0}' title='\lambda_i \in \N_{&gt;0}' class='latex-inline' /> such that <img src='http://math.fontein.de/wp-content/latex/561/5614371f803f8a78b18b27391549a107-T-000000-0.png' alt='\lambda_i' title='\lambda_i' class='latex-inline' /> divides <img src='http://math.fontein.de/wp-content/latex/938/9387171fca5f36c535d4d928c4536aaf-T-000000-0.png' alt='\lambda_{i+1}' title='\lambda_{i+1}' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/f38/f3884b9b32cdea43076a4b98787df424-T-000000-0.png' alt='1 \le i &lt; n' title='1 \le i &lt; n' class='latex-inline' />; then, <img src='http://math.fontein.de/wp-content/latex/a90/a905519d0e10a2c7af468d1c4b309e3b-T-000000-0.png' alt='\Z^n / \Lambda \cong \prod_{i=1}^n \Z/\lambda_i \Z' title='\Z^n / \Lambda \cong \prod_{i=1}^n \Z/\lambda_i \Z' class='latex-inline' />. Hence, computing the structure of a finite abelian group generated by <img src='http://math.fontein.de/wp-content/latex/e49/e4903566c7e7f582f4c6c8e7aa9ab8c5-T-000000-0.png' alt='g_1, \dots, g_n' title='g_1, \dots, g_n' class='latex-inline' /> can be split up in the two parts, (a) computation of a basis of the relation lattice <img src='http://math.fontein.de/wp-content/latex/81f/81f48659c64fdae6101495d50b2282f5-T-000000-0.png' alt='\Lambda_{(g_1, \dots, g_n)}' title='\Lambda_{(g_1, \dots, g_n)}' class='latex-inline' /> and (b) computation of a Smith normal form of this basis. There exist a lot of algorithms for computation of Smith normal forms; usually, the bottleneck is finding a basis of <img src='http://math.fontein.de/wp-content/latex/81f/81f48659c64fdae6101495d50b2282f5-T-000000-0.png' alt='\Lambda_{(g_1, \dots, g_n)}' title='\Lambda_{(g_1, \dots, g_n)}' class='latex-inline' />.</p>
<p>Often, the process of finding a lattice equals determining the relation lattice of a finite abelian group, or something similar. One often has a way to test whether <img src='http://math.fontein.de/wp-content/latex/1af/1af084d2f3078407f9678dc8eae0fdbb-T-000000-0.png' alt='v + \Lambda = w + \Lambda' title='v + \Lambda = w + \Lambda' class='latex-inline' />, by computing a unique representation of the residue class <img src='http://math.fontein.de/wp-content/latex/563/56344e3f1feaa982223d23ff0d24ea88-T-000000-0.png' alt='v + \Lambda' title='v + \Lambda' class='latex-inline' />; then, one tries to find two ways <img src='http://math.fontein.de/wp-content/latex/1af/1af084d2f3078407f9678dc8eae0fdbb-T-000000-0.png' alt='v + \Lambda = w + \Lambda' title='v + \Lambda = w + \Lambda' class='latex-inline' /> of writing the same residue class, but with <img src='http://math.fontein.de/wp-content/latex/bbc/bbc4aed19d38ed56e86260163bca72fa-T-000000-0.png' alt='v \neq w' title='v \neq w' class='latex-inline' />: then <img src='http://math.fontein.de/wp-content/latex/695/69586cbe3cbaa617504e6e619cd78d83-T-000000-0.png' alt='v - w' title='v - w' class='latex-inline' /> is a non-trivial element of <img src='http://math.fontein.de/wp-content/latex/781/781ff4289c6cc5fc2973b7a57791e0e2-T-000000-0.png' alt='\Lambda' title='\Lambda' class='latex-inline' />. If one sets <img src='http://math.fontein.de/wp-content/latex/0a5/0a5206de58e67ac8d639eb0d1ec8cfed-T-000000-0.png' alt='G := \Z^n / \Lambda' title='G := \Z^n / \Lambda' class='latex-inline' />, then this means that one seeks for pairs <img src='http://math.fontein.de/wp-content/latex/105/10539e3bb4b9ab6b9f2e125c91733397-T-000000-0.png' alt='(v, g)' title='(v, g)' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/92d/92d71b1d249541366785e004998ee690-T-000000-0.png' alt='(w, h)' title='(w, h)' class='latex-inline' />, where <img src='http://math.fontein.de/wp-content/latex/e8d/e8d538e8304838534e1edb0416c04576-T-000000-0.png' alt='g = v + \Lambda' title='g = v + \Lambda' class='latex-inline' /> and <img src='' alt='Formula does not parse: h = w + \Lamda' title='Formula does not parse: h = w + \Lamda' class='latex-inline' />, such that <img src='http://math.fontein.de/wp-content/latex/bf9/bf955f84dd7782f538cc8315d45b5d64-T-000000-0.png' alt='g = h' title='g = h' class='latex-inline' /> and <img src='http://math.fontein.de/wp-content/latex/bbc/bbc4aed19d38ed56e86260163bca72fa-T-000000-0.png' alt='v \neq w' title='v \neq w' class='latex-inline' />.</p>
<p>More generally, assume that <img src='http://math.fontein.de/wp-content/latex/021/02129bb861061d1a052c592e2dc6b383-T-000000-0.png' alt='X' title='X' class='latex-inline' /> is a finite set and <img src='http://math.fontein.de/wp-content/latex/155/1556f171a0cc693c4eebbd7e6d6cc17f-T-000000-0.png' alt='\pi : \Z^n \to X' title='\pi : \Z^n \to X' class='latex-inline' /> is a map such that <img src='http://math.fontein.de/wp-content/latex/bc4/bc4573a2d8aea4271643c6cecb6f6bd5-T-000000-0.png' alt='\pi(x + \lambda) = \pi(x)' title='\pi(x + \lambda) = \pi(x)' class='latex-inline' /> for all <img src='http://math.fontein.de/wp-content/latex/00e/00ea34d26b099e9a8fcb9c46e0c53f85-T-000000-0.png' alt='\lambda \in \Lambda' title='\lambda \in \Lambda' class='latex-inline' />. Our above example, <img src='http://math.fontein.de/wp-content/latex/155/15554489a62db7df63d7d7b18c4d7192-T-000000-0.png' alt='G = \Z^n / \Lambda' title='G = \Z^n / \Lambda' class='latex-inline' /> and <img src='http://math.fontein.de/wp-content/latex/f71/f71a7a7138efe8c76b25d8e32614a01d-T-000000-0.png' alt='\pi(x) = x + \Lambda' title='\pi(x) = x + \Lambda' class='latex-inline' /> satisfies this. Moreover, assume that <img src='http://math.fontein.de/wp-content/latex/692/692ba05d4c25459dc2e9c1e453efcedd-T-000000-0.png' alt='\pi : \Z^n / \Lambda \to X' title='\pi : \Z^n / \Lambda \to X' class='latex-inline' /> is &ldquo;mostly injective&rdquo;, i.e. that <img src='http://math.fontein.de/wp-content/latex/0af/0afb1eff29cbf8419559ce20d49ddc6c-T-000000-0.png' alt='\pi(v) = \pi(w)' title='\pi(v) = \pi(w)' class='latex-inline' /> implies that one can find <img src='http://math.fontein.de/wp-content/latex/722/7222f1d3ff92d183f482dc7a605027b6-T-000000-0.png' alt='\tilde{v}, \tilde{w} \in \Z^n' title='\tilde{v}, \tilde{w} \in \Z^n' class='latex-inline' /> such that <img src='http://math.fontein.de/wp-content/latex/517/517b8bcc918c8d442f5965c25225c232-T-000000-0.png' alt='\tilde{v} \approx v' title='\tilde{v} \approx v' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/dd2/dd2166507389a3f04ae517c9205aadda-T-000000-0.png' alt='\tilde{w} \approx w' title='\tilde{w} \approx w' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/0e5/0e57167507c9497580d4a24d95facf84-T-000000-0.png' alt='\tilde{v} - \tilde{w} \in \Lambda' title='\tilde{v} - \tilde{w} \in \Lambda' class='latex-inline' /> with very little effort. Then one can work with elements <img src='http://math.fontein.de/wp-content/latex/49b/49b311da0ed4baee4da4dd66e37ef59c-T-000000-0.png' alt='(x, y)' title='(x, y)' class='latex-inline' /> with <img src='http://math.fontein.de/wp-content/latex/cb2/cb217f151e458a74691e2de080b692ad-T-000000-0.png' alt='y = \pi(x)' title='y = \pi(x)' class='latex-inline' />, and try to find two such pairs <img src='http://math.fontein.de/wp-content/latex/49b/49b311da0ed4baee4da4dd66e37ef59c-T-000000-0.png' alt='(x, y)' title='(x, y)' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/37b/37be7bebf68f86046aa0c7331f3a6ffd-T-000000-0.png' alt='(x&#039;, y&#039;)' title='(x&#039;, y&#039;)' class='latex-inline' /> with <img src='http://math.fontein.de/wp-content/latex/600/6009c50590f25121dc944c3b84bb2873-T-000000-0.png' alt='y = y&#039;' title='y = y&#039;' class='latex-inline' />; then this gives rise to an element of <img src='http://math.fontein.de/wp-content/latex/781/781ff4289c6cc5fc2973b7a57791e0e2-T-000000-0.png' alt='\Lambda' title='\Lambda' class='latex-inline' /> near to <img src='http://math.fontein.de/wp-content/latex/0e2/0e234d297927b828812bbf380b0b628d-T-000000-0.png' alt='x - x&#039;' title='x - x&#039;' class='latex-inline' />.</p>
<p>Which brings us to the subject of explaining algorithms. Consider, for example, Shanks&#8217; baby-step giant-step algorithm. You are given a group element of finite order <img src='http://math.fontein.de/wp-content/latex/b2f/b2f5ff47436671b6e533d8dc3614845d-T-000000-0.png' alt='g' title='g' class='latex-inline' /> together with a bound <img src='http://math.fontein.de/wp-content/latex/746/746a7efa1a98de1a98cfc7d710b8f201-T-000000-0.png' alt='B &gt; 0' title='B &gt; 0' class='latex-inline' />. Then, for the algorithm, one computes <img src='http://math.fontein.de/wp-content/latex/7cf/7cf2fda0295dcbb130356e79ad17ecbf-T-000000-0.png' alt='g^0, g^1, \dots, g^{B-1}' title='g^0, g^1, \dots, g^{B-1}' class='latex-inline' />, as well as <img src='http://math.fontein.de/wp-content/latex/681/6819a8c1cf5c71202faafa91a9f2105d-T-000000-0.png' alt='g^B, g^{2 B}, g^{3 B}, \dots' title='g^B, g^{2 B}, g^{3 B}, \dots' class='latex-inline' />, and compares this elements with the first <img src='http://math.fontein.de/wp-content/latex/9d5/9d5ed678fe57bcca610140957afab571-T-000000-0.png' alt='B' title='B' class='latex-inline' /> elements. Any match will result in a multiple of the order of <img src='http://math.fontein.de/wp-content/latex/b2f/b2f5ff47436671b6e533d8dc3614845d-T-000000-0.png' alt='g' title='g' class='latex-inline' />. But why is this the case? One can of course try to prove this; it is actually not very hard, in fact one just needs <a href="http://math.fontein.de/forward.php?r=http://en.wikipedia.org/wiki/Fermat's_little_theorem">Fermat&#8217;s Little Theorem</a> as well as <a href="http://math.fontein.de/forward.php?r=http://en.wikipedia.org/wiki/Long_division">long division</a>. But one can do better, by visualizing the algorithm in a way which makes the solution looking obvious, and which allows even people who have no understanding of formal mathematics or computer science to immediately realize that the algorithm produces the correct result.</p>
<p>Namely, you might have guessed it, the order of <img src='http://math.fontein.de/wp-content/latex/b2f/b2f5ff47436671b6e533d8dc3614845d-T-000000-0.png' alt='g' title='g' class='latex-inline' /> generates the relation lattice <img src='http://math.fontein.de/wp-content/latex/008/0080487ef7b0fc81e3e3155fb2cfb6a8-T-000000-0.png' alt='\Lambda_{(g)}' title='\Lambda_{(g)}' class='latex-inline' />. Hence finding the order is equivalent to finding a the smallest positive element in <img src='http://math.fontein.de/wp-content/latex/4fe/4fe6a3ad99bf0d211d6a63d62a009afb-T-000000-0.png' alt='\Lambda_{(g)} \subseteq \Z' title='\Lambda_{(g)} \subseteq \Z' class='latex-inline' />. For this correspondence, we use the pairs <img src='http://math.fontein.de/wp-content/latex/ae0/ae00e90a1242efbaa105a2c90a130fc1-T-000000-0.png' alt='(n, g^n)' title='(n, g^n)' class='latex-inline' /> with <img src='http://math.fontein.de/wp-content/latex/d6e/d6e49bd8411286f16dd3c4448b981ec9-T-000000-0.png' alt='n \in \Z' title='n \in \Z' class='latex-inline' /> as above. Two pairs <img src='http://math.fontein.de/wp-content/latex/d2d/d2d20eb61348436fb746bfc7c2287488-T-000000-0.png' alt='(n, g^n), (m, g^m)' title='(n, g^n), (m, g^m)' class='latex-inline' /> with <img src='http://math.fontein.de/wp-content/latex/e53/e53a33bbca34af2427d04c7380cfff1b-T-000000-0.png' alt='g^n = g^m' title='g^n = g^m' class='latex-inline' /> gives a multiple <img src='http://math.fontein.de/wp-content/latex/88a/88a21e6a3e2ebbd7deb5212b0baa4058-T-000000-0.png' alt='n - m' title='n - m' class='latex-inline' /> of the order of <img src='http://math.fontein.de/wp-content/latex/b2f/b2f5ff47436671b6e533d8dc3614845d-T-000000-0.png' alt='g' title='g' class='latex-inline' />. Now, the algorithm can be interpreted as translating the set of elements <img src='http://math.fontein.de/wp-content/latex/6fe/6fe969a9d3380dcc89d5121e00c0bea8-T-000000-0.png' alt='X_B := \{ -B+1, -B+2, \dots, -2, -1, 0 \}' title='X_B := \{ -B+1, -B+2, \dots, -2, -1, 0 \}' class='latex-inline' /> by <img src='http://math.fontein.de/wp-content/latex/9d5/9d5ed678fe57bcca610140957afab571-T-000000-0.png' alt='B' title='B' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/912/9126593c885ac8f753acd838a89a278d-T-000000-0.png' alt='2 B' title='2 B' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/eb3/eb3684274c69340531a1db4ecb14eec1-T-000000-0.png' alt='3 B' title='3 B' class='latex-inline' />, and checking if a lattice element is contained in any of these translates. If one visualizes this, one immediately sees that this method will eventually find the smallest non-zero element of the lattice. First, this depicts the lattice <img src='http://math.fontein.de/wp-content/latex/145/1458a437b3c6456f9ebf61d46c9ed13e-T-000000-0.png' alt='\Z' title='\Z' class='latex-inline' /> (gray dots) with its sublattice <img src='http://math.fontein.de/wp-content/latex/008/0080487ef7b0fc81e3e3155fb2cfb6a8-T-000000-0.png' alt='\Lambda_{(g)}' title='\Lambda_{(g)}' class='latex-inline' /> (black dots), with the set <img src='http://math.fontein.de/wp-content/latex/37b/37b6a03e7fabfdd6adc0ca58c472e3c8-T-000000-0.png' alt='X_B = \{ -B+1, \dots, 0 \}' title='X_B = \{ -B+1, \dots, 0 \}' class='latex-inline' /> drawn in for <img src='http://math.fontein.de/wp-content/latex/97f/97f51400775e422380f3b6ef85889c7a-T-000000-0.png' alt='B = 8' title='B = 8' class='latex-inline' />:<br />
<img src='http://math.fontein.de/wp-content/latex/721/7211a7495e7f751a70461587d86e65fe-T-000000-0.png' alt='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \filldraw[black!67, fill=black!20] (-7.4,-0.4) to (-7.4,0.4) to (0.4,0.4) to (0.4,-0.4) to (-7.4,-0.4);      \draw (-5,0) to (-5,-0.75);      \node[empt] (gm5) at (-5,0) [label=below: \footnotesize \( g^{-5} \)] {};      \draw (0,0) to (0,-0.75);      \node[gelt] (g0) at (0,0) [label=below: \footnotesize \( g^0 \)] {};      \draw (5,0) to (5,-0.75);      \node[empt] (g5) at (5,0) [label=below: \footnotesize \( g^5 \)] {};      \draw (10,0) to (10,-0.75);      \node[empt] (g10) at (10,0) [label=below: \footnotesize \( g^{10} \)] {};      \draw (23,0) to (23,-0.75);      \node[gelt] (g23) at (23,0) [label=below: \footnotesize \( g^{23} \)] {};      \foreach \i in {-9,-8,-7,-6,-4,-3,-2,-1} \node[empt] at (\i,0) {};      \foreach \i in {1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,0) {};      \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,0) {};  \end{tikzpicture}}' title='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \filldraw[black!67, fill=black!20] (-7.4,-0.4) to (-7.4,0.4) to (0.4,0.4) to (0.4,-0.4) to (-7.4,-0.4);      \draw (-5,0) to (-5,-0.75);      \node[empt] (gm5) at (-5,0) [label=below: \footnotesize \( g^{-5} \)] {};      \draw (0,0) to (0,-0.75);      \node[gelt] (g0) at (0,0) [label=below: \footnotesize \( g^0 \)] {};      \draw (5,0) to (5,-0.75);      \node[empt] (g5) at (5,0) [label=below: \footnotesize \( g^5 \)] {};      \draw (10,0) to (10,-0.75);      \node[empt] (g10) at (10,0) [label=below: \footnotesize \( g^{10} \)] {};      \draw (23,0) to (23,-0.75);      \node[gelt] (g23) at (23,0) [label=below: \footnotesize \( g^{23} \)] {};      \foreach \i in {-9,-8,-7,-6,-4,-3,-2,-1} \node[empt] at (\i,0) {};      \foreach \i in {1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,0) {};      \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,0) {};  \end{tikzpicture}}' class='latex-displaystyle' /><br />
The next figure depicts the translates of <img src='http://math.fontein.de/wp-content/latex/275/27537cd086a8e9f62bba71321bd87403-T-000000-0.png' alt='X_B' title='X_B' class='latex-inline' /> by <img src='http://math.fontein.de/wp-content/latex/c74/c74db970a45ec0f1735e37d093273006-T-000000-0.png' alt='B, 2 B, 3 B, \dots' title='B, 2 B, 3 B, \dots' class='latex-inline' />:<br />
<img src='http://math.fontein.de/wp-content/latex/f2a/f2a6c9742d1fdc0ccf1f4151365cf001-T-000000-0.png' alt='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \filldraw[black!67, fill=black!20] (0.6,-0.4) to (0.6,0.4) to (8.4,0.4) to (8.4,-0.4) to (0.6,-0.4);      \filldraw[black!67, fill=black!20] (8.6,-0.4) to (8.6,0.4) to (16.4,0.4) to (16.4,-0.4) to (8.6,-0.4);      \filldraw[black!67, fill=black!20] (16.6,-0.4) to (16.6,0.4) to (24.4,0.4) to (24.4,-0.4) to (16.6,-0.4);      \filldraw[black!67, fill=black!20] (29.4,-0.4) to (24.6,-0.4) to (24.6,0.4) to (29.4,0.4);      \draw (-5,0) to (-5,-0.75);      \node[empt] (gm5) at (-5,0) [label=below: \footnotesize \( g^{-5} \)] {};      \draw (0,0) to (0,-0.75);      \node[gelt] (g0) at (0,0) [label=below: \footnotesize \( g^0 \)] {};      \draw (5,0) to (5,-0.75);      \node[empt] (g5) at (5,0) [label=below: \footnotesize \( g^5 \)] {};      \draw (10,0) to (10,-0.75);      \node[empt] (g10) at (10,0) [label=below: \footnotesize \( g^{10} \)] {};      \draw (23,0) to (23,-0.75);      \node[gelt] (g23) at (23,0) [label=below: \footnotesize \( g^{23} \)] {};      \foreach \i in {-9,-8,-7,-6,-4,-3,-2,-1} \node[empt] at (\i,0) {};      \foreach \i in {1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,0) {};      \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,0) {};  \end{tikzpicture}}' title='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \filldraw[black!67, fill=black!20] (0.6,-0.4) to (0.6,0.4) to (8.4,0.4) to (8.4,-0.4) to (0.6,-0.4);      \filldraw[black!67, fill=black!20] (8.6,-0.4) to (8.6,0.4) to (16.4,0.4) to (16.4,-0.4) to (8.6,-0.4);      \filldraw[black!67, fill=black!20] (16.6,-0.4) to (16.6,0.4) to (24.4,0.4) to (24.4,-0.4) to (16.6,-0.4);      \filldraw[black!67, fill=black!20] (29.4,-0.4) to (24.6,-0.4) to (24.6,0.4) to (29.4,0.4);      \draw (-5,0) to (-5,-0.75);      \node[empt] (gm5) at (-5,0) [label=below: \footnotesize \( g^{-5} \)] {};      \draw (0,0) to (0,-0.75);      \node[gelt] (g0) at (0,0) [label=below: \footnotesize \( g^0 \)] {};      \draw (5,0) to (5,-0.75);      \node[empt] (g5) at (5,0) [label=below: \footnotesize \( g^5 \)] {};      \draw (10,0) to (10,-0.75);      \node[empt] (g10) at (10,0) [label=below: \footnotesize \( g^{10} \)] {};      \draw (23,0) to (23,-0.75);      \node[gelt] (g23) at (23,0) [label=below: \footnotesize \( g^{23} \)] {};      \foreach \i in {-9,-8,-7,-6,-4,-3,-2,-1} \node[empt] at (\i,0) {};      \foreach \i in {1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,0) {};      \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,0) {};  \end{tikzpicture}}' class='latex-displaystyle' /><br />
One directly sees that the translates <img src='http://math.fontein.de/wp-content/latex/63c/63c41b51395001a1e31aaabdeb4db89d-T-000000-0.png' alt='X_B + k B' title='X_B + k B' class='latex-inline' />, <img src='http://math.fontein.de/wp-content/latex/8d1/8d1ea70d1e425aabd7ee27c054ced9b6-T-000000-0.png' alt='k \in \N_{&gt;0}' title='k \in \N_{&gt;0}' class='latex-inline' /> cover all positive integers, and that every positive integer is contained in exactly one translate. Moreover, one sees that if the first translate contains at most one lattice element, the first translate which contains a lattice element uniquely determines the smallest positive integer. Note that in case <img src='http://math.fontein.de/wp-content/latex/7b8/7b8b965ad4bca0e41ab51de7b31363a1-T-000000-0.png' alt='n' title='n' class='latex-inline' /> is the order of <img src='http://math.fontein.de/wp-content/latex/b2f/b2f5ff47436671b6e533d8dc3614845d-T-000000-0.png' alt='g' title='g' class='latex-inline' />, then one can minimize the number of operations by chosing <img src='http://math.fontein.de/wp-content/latex/030/030111eac6f57661a116610afa4e4b32-T-000000-0.png' alt='B \approx \sqrt{n}' title='B \approx \sqrt{n}' class='latex-inline' />.</p>
<p>Now let us consider <a href="http://math.fontein.de/forward.php?r=http://portal.acm.org/citation.cfm%3Fid=343671">Terr&#8217;s modification</a> of the baby-step giant-step algorithm; there, the situation is a bit more complicated. In Terr&#8217;s algorithm, the bound <img src='http://math.fontein.de/wp-content/latex/9d5/9d5ed678fe57bcca610140957afab571-T-000000-0.png' alt='B' title='B' class='latex-inline' /> from above constantly changes, starting with <img src='http://math.fontein.de/wp-content/latex/985/985fde0688ce97bcc8a3c5f0172f6f9b-T-000000-0.png' alt='B = 1' title='B = 1' class='latex-inline' />. Written as pseudo-code, the algorithm looks like this:</p>
<ol>
<li>Let <img src='http://math.fontein.de/wp-content/latex/2e1/2e1b156f08242221e8c73cf7e15d8b86-T-000000-0.png' alt='a := g^1' title='a := g^1' class='latex-inline' /> and <img src='http://math.fontein.de/wp-content/latex/395/3955eca2bfb8d2b915096c3f9727b713-T-000000-0.png' alt='b := g^1' title='b := g^1' class='latex-inline' />, and let <img src='http://math.fontein.de/wp-content/latex/0f8/0f85fa1166fb3fa5015d6b34281c050a-T-000000-0.png' alt='B := 1' title='B := 1' class='latex-inline' /> and <img src='http://math.fontein.de/wp-content/latex/2fb/2fb2c4ce8cb9109420a0dd3938370b04-T-000000-0.png' alt='X_B := \{ (g^0, 0) \}' title='X_B := \{ (g^0, 0) \}' class='latex-inline' />.</li>
<li>If <img src='http://math.fontein.de/wp-content/latex/7fa/7fa7434d1f511a4f608064111a97ab27-T-000000-0.png' alt='(b, n) \in X_B' title='(b, n) \in X_B' class='latex-inline' /> for some <img src='http://math.fontein.de/wp-content/latex/72e/72e07933327508be8d2ca29128a878d7-T-000000-0.png' alt='n \in \N' title='n \in \N' class='latex-inline' />, return <img src='http://math.fontein.de/wp-content/latex/d35/d35abd92e50eadff732e1aa5a4fb60c2-T-000000-0.png' alt='\frac{B (B + 1)}{2} - n' title='\frac{B (B + 1)}{2} - n' class='latex-inline' />.</li>
<li>Set <img src='http://math.fontein.de/wp-content/latex/892/892b3178c6a9681cef821fa7cea944af-T-000000-0.png' alt='X_B := X_B \cup \{ (a, B) \}' title='X_B := X_B \cup \{ (a, B) \}' class='latex-inline' />, and set <img src='http://math.fontein.de/wp-content/latex/f79/f79efa25f5c4b29d92d13529c8ce3dd1-T-000000-0.png' alt='B := B + 1' title='B := B + 1' class='latex-inline' />.</li>
<li>Compute <img src='http://math.fontein.de/wp-content/latex/390/39036d88b21a08ee890b56a9d9b07227-T-000000-0.png' alt='a := a \cdot g' title='a := a \cdot g' class='latex-inline' /> and <img src='http://math.fontein.de/wp-content/latex/f7d/f7d9c6979d1901dca4347b14f514992f-T-000000-0.png' alt='b := b \cdot a' title='b := b \cdot a' class='latex-inline' />.</li>
<li>Go back to Step 2.</li>
</ol>
<p>There is no obvious reason why this should work. Note that the test whether <img src='http://math.fontein.de/wp-content/latex/7fa/7fa7434d1f511a4f608064111a97ab27-T-000000-0.png' alt='(b, n) \in X_B' title='(b, n) \in X_B' class='latex-inline' /> means that one translates <img src='http://math.fontein.de/wp-content/latex/cb5/cb585485c168507878cb6a9e410ae4db-T-000000-0.png' alt='\{ -B + 1, \dots, 0 \}' title='\{ -B + 1, \dots, 0 \}' class='latex-inline' /> by the exponent <img src='http://math.fontein.de/wp-content/latex/4a8/4a8a08f09d37b73795649038408b5f33-T-000000-0.png' alt='c' title='c' class='latex-inline' /> of <img src='http://math.fontein.de/wp-content/latex/de4/de4711a4a0b4d6614ff73455ea83fb7f-T-000000-0.png' alt='b = g^c' title='b = g^c' class='latex-inline' />, which turns out to be <img src='http://math.fontein.de/wp-content/latex/ee4/ee4b25cfc76c3daac6fba351d066fb00-T-000000-0.png' alt='\frac{B (B + 1)}{2}' title='\frac{B (B + 1)}{2}' class='latex-inline' />. One immediately gets the idea if one draws the first few translates:<br />
<img src='http://math.fontein.de/wp-content/latex/aa3/aa30340532be15460694871edcae48ed-T-000000-0.png' alt='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \filldraw[black!67, fill=black!20] (0.6,-0.4) to (0.6,0.4) to (1.4,0.4) to (1.4,-0.4) to (0.6,-0.4);      \filldraw[black!67, fill=black!20] (1.6,-0.4) to (1.6,0.4) to (3.4,0.4) to (3.4,-0.4) to (1.6,-0.4);      \filldraw[black!67, fill=black!20] (3.6,-0.4) to (3.6,0.4) to (6.4,0.4) to (6.4,-0.4) to (3.6,-0.4);      \filldraw[black!67, fill=black!20] (6.6,-0.4) to (6.6,0.4) to (10.4,0.4) to (10.4,-0.4) to (6.6,-0.4);      \filldraw[black!67, fill=black!20] (10.6,-0.4) to (10.6,0.4) to (15.4,0.4) to (15.4,-0.4) to (10.6,-0.4);      \filldraw[black!67, fill=black!20] (15.6,-0.4) to (15.6,0.4) to (21.4,0.4) to (21.4,-0.4) to (15.6,-0.4);      \filldraw[black!67, fill=black!20] (21.6,-0.4) to (21.6,0.4) to (28.4,0.4) to (28.4,-0.4) to (21.6,-0.4);      \filldraw[black!67, fill=black!20] (29.4,-0.4) to (28.6,-0.4) to (28.6,0.4) to (29.4,0.4);      \draw (-5,0) to (-5,-0.75);      \node[empt] (gm5) at (-5,0) [label=below: \footnotesize \( g^{-5} \)] {};      \draw (0,0) to (0,-0.75);      \node[gelt] (g0) at (0,0) [label=below: \footnotesize \( g^0 \)] {};      \draw (5,0) to (5,-0.75);      \node[empt] (g5) at (5,0) [label=below: \footnotesize \( g^5 \)] {};      \draw (10,0) to (10,-0.75);      \node[empt] (g10) at (10,0) [label=below: \footnotesize \( g^{10} \)] {};      \draw (23,0) to (23,-0.75);      \node[gelt] (g23) at (23,0) [label=below: \footnotesize \( g^{23} \)] {};      \foreach \i in {-9,-8,-7,-6,-4,-3,-2,-1} \node[empt] at (\i,0) {};      \foreach \i in {1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,0) {};      \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,0) {};  \end{tikzpicture}}' title='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \filldraw[black!67, fill=black!20] (0.6,-0.4) to (0.6,0.4) to (1.4,0.4) to (1.4,-0.4) to (0.6,-0.4);      \filldraw[black!67, fill=black!20] (1.6,-0.4) to (1.6,0.4) to (3.4,0.4) to (3.4,-0.4) to (1.6,-0.4);      \filldraw[black!67, fill=black!20] (3.6,-0.4) to (3.6,0.4) to (6.4,0.4) to (6.4,-0.4) to (3.6,-0.4);      \filldraw[black!67, fill=black!20] (6.6,-0.4) to (6.6,0.4) to (10.4,0.4) to (10.4,-0.4) to (6.6,-0.4);      \filldraw[black!67, fill=black!20] (10.6,-0.4) to (10.6,0.4) to (15.4,0.4) to (15.4,-0.4) to (10.6,-0.4);      \filldraw[black!67, fill=black!20] (15.6,-0.4) to (15.6,0.4) to (21.4,0.4) to (21.4,-0.4) to (15.6,-0.4);      \filldraw[black!67, fill=black!20] (21.6,-0.4) to (21.6,0.4) to (28.4,0.4) to (28.4,-0.4) to (21.6,-0.4);      \filldraw[black!67, fill=black!20] (29.4,-0.4) to (28.6,-0.4) to (28.6,0.4) to (29.4,0.4);      \draw (-5,0) to (-5,-0.75);      \node[empt] (gm5) at (-5,0) [label=below: \footnotesize \( g^{-5} \)] {};      \draw (0,0) to (0,-0.75);      \node[gelt] (g0) at (0,0) [label=below: \footnotesize \( g^0 \)] {};      \draw (5,0) to (5,-0.75);      \node[empt] (g5) at (5,0) [label=below: \footnotesize \( g^5 \)] {};      \draw (10,0) to (10,-0.75);      \node[empt] (g10) at (10,0) [label=below: \footnotesize \( g^{10} \)] {};      \draw (23,0) to (23,-0.75);      \node[gelt] (g23) at (23,0) [label=below: \footnotesize \( g^{23} \)] {};      \foreach \i in {-9,-8,-7,-6,-4,-3,-2,-1} \node[empt] at (\i,0) {};      \foreach \i in {1,2,3,4,6,7,8,9,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,0) {};      \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,0) {};  \end{tikzpicture}}' class='latex-displaystyle' /><br />
This is another tiling of <img src='http://math.fontein.de/wp-content/latex/ff1/ff1c5a8ec16ccfcbff28cb86159edadc-T-000000-0.png' alt='\N_{&gt;0}' title='\N_{&gt;0}' class='latex-inline' />, where every positive integer is contained in exactly one translate. This tiling has the property that the first time <img src='http://math.fontein.de/wp-content/latex/7fa/7fa7434d1f511a4f608064111a97ab27-T-000000-0.png' alt='(b, n) \in X_B' title='(b, n) \in X_B' class='latex-inline' /> occurs for some <img src='http://math.fontein.de/wp-content/latex/72e/72e07933327508be8d2ca29128a878d7-T-000000-0.png' alt='n \in \N' title='n \in \N' class='latex-inline' /> is when the order of <img src='http://math.fontein.de/wp-content/latex/b2f/b2f5ff47436671b6e533d8dc3614845d-T-000000-0.png' alt='g' title='g' class='latex-inline' /> is found, and one no longer has to fix a bound <img src='http://math.fontein.de/wp-content/latex/9d5/9d5ed678fe57bcca610140957afab571-T-000000-0.png' alt='B' title='B' class='latex-inline' /> before. The asymptotic complexity of this method is the same as the previous method in case <img src='http://math.fontein.de/wp-content/latex/030/030111eac6f57661a116610afa4e4b32-T-000000-0.png' alt='B \approx \sqrt{n}' title='B \approx \sqrt{n}' class='latex-inline' />, but in case <img src='http://math.fontein.de/wp-content/latex/9d5/9d5ed678fe57bcca610140957afab571-T-000000-0.png' alt='B' title='B' class='latex-inline' /> is chosen the wrong way, the first algorithm will perform worse than the second. Another way to visualize the second agorithm is to depict the set <img src='http://math.fontein.de/wp-content/latex/a3a/a3ac9014a073838aaa692b85c81bab0d-T-000000-0.png' alt='\{ -B+1, \dots, 0 \}' title='\{ -B+1, \dots, 0 \}' class='latex-inline' /> together with <img src='http://math.fontein.de/wp-content/latex/ee4/ee4b25cfc76c3daac6fba351d066fb00-T-000000-0.png' alt='\frac{B (B + 1)}{2}' title='\frac{B (B + 1)}{2}' class='latex-inline' />, where <img src='http://math.fontein.de/wp-content/latex/acb/acb3e67ac59e8e6606e92f4d16d2262d-T-000000-0.png' alt='a = g^B' title='a = g^B' class='latex-inline' /> and <img src='http://math.fontein.de/wp-content/latex/f07/f0728af3e7036b6df3579a2f48946b3c-T-000000-0.png' alt='b = g^{B (B + 1)/2}' title='b = g^{B (B + 1)/2}' class='latex-inline' />, for <img src='http://math.fontein.de/wp-content/latex/97e/97e9e525417b1dafbe2aa2c428862d1a-T-000000-0.png' alt='B = 1, 2, \dots, 7' title='B = 1, 2, \dots, 7' class='latex-inline' />:<br />
<img src='http://math.fontein.de/wp-content/latex/d87/d87b46997ea0b21e9cb9199b6b535448-T-000000-0.png' alt='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \foreach \B in { 1, 2, 3, 4, 5, 6, 7 }      {        \filldraw[black!20, fill=black!67] (-\B+0.6,-\B-0.4) to (-\B+0.6,-\B+0.4) to (0.4,-\B+0.4) to (0.4,-\B-0.4) to (-\B+0.6,-\B-0.4);        \filldraw[black!67, fill=black!20] (\B*\B/2-\B/2+0.6,-\B-0.4) to (\B*\B/2-\B/2+0.6,-\B+0.4) to (\B*\B/2+\B/2+0.4,-\B+0.4)                                              to (\B*\B/2+\B/2+0.4,-\B-0.4) to (\B*\B/2-\B/2+0.6,-\B-0.4);        \filldraw[black!20, fill=black!67] (\B*\B/2+\B/2-0.4,-\B-0.4) to (\B*\B/2+\B/2-0.4,-\B+0.4) to (\B*\B/2+\B/2+0.4,-\B+0.4)                                              to (\B*\B/2+\B/2+0.4,-\B-0.4) to (\B*\B/2+\B/2-0.4,-\B-0.4);        \foreach \i in {-9,-8,-7,-6,-5,-4,-3,-2,-1} \node[empt] at (\i,-\B) {};        \node[gelt] at (0,-\B) {};        \foreach \i in {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,-\B) {};        \node[gelt] at (23,-\B) {};        \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,-\B) {};      }  \end{tikzpicture}}' title='\fbox{\begin{tikzpicture}[scale=0.3, node distance=0mm]      \tikzstyle{gelt} = [draw, shape = circle, fill=black, inner sep=0pt, minimum size = 0.2cm];      \tikzstyle{empt} = [draw, shape = circle, inner sep=0pt, minimum size = 0.2cm];      \foreach \B in { 1, 2, 3, 4, 5, 6, 7 }      {        \filldraw[black!20, fill=black!67] (-\B+0.6,-\B-0.4) to (-\B+0.6,-\B+0.4) to (0.4,-\B+0.4) to (0.4,-\B-0.4) to (-\B+0.6,-\B-0.4);        \filldraw[black!67, fill=black!20] (\B*\B/2-\B/2+0.6,-\B-0.4) to (\B*\B/2-\B/2+0.6,-\B+0.4) to (\B*\B/2+\B/2+0.4,-\B+0.4)                                              to (\B*\B/2+\B/2+0.4,-\B-0.4) to (\B*\B/2-\B/2+0.6,-\B-0.4);        \filldraw[black!20, fill=black!67] (\B*\B/2+\B/2-0.4,-\B-0.4) to (\B*\B/2+\B/2-0.4,-\B+0.4) to (\B*\B/2+\B/2+0.4,-\B+0.4)                                              to (\B*\B/2+\B/2+0.4,-\B-0.4) to (\B*\B/2+\B/2-0.4,-\B-0.4);        \foreach \i in {-9,-8,-7,-6,-5,-4,-3,-2,-1} \node[empt] at (\i,-\B) {};        \node[gelt] at (0,-\B) {};        \foreach \i in {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22} \node[empt] at (\i,-\B) {};        \node[gelt] at (23,-\B) {};        \foreach \i in {24,25,26,27,28,29} \node[empt] at (\i,-\B) {};      }  \end{tikzpicture}}' class='latex-displaystyle' /></p>
]]></content:encoded>
			<wfw:commentRss>http://math.fontein.de/2010/01/29/finding-lattice-points-finite-abelian-groups-and-explaining-algorithms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

