I'd like to suggest, that some sort of sieve could be included,
for instance as a non very fancy example something like
def primes(n):
s = set(range(3,n+1,2))
if n >= 2: s.add(2)
m=3
while m * m < n:
s.difference_update(range(m*m, n+1, 2*m))
m += 2
while m not in s: m += 2
return sorted(s)
(as a starting point), or something similar, a bit beautified or
perhaps you know some different more concise solution ...
An even more compact albeit slightly slower version would be:
def primes(n):
s = set(range(3,n+1,2))
for m in range(3, int(n**.5)+1, 2):
s.difference_update(range(m*m, n+1, 2*m))
return [2]*(2<=n) + sorted(s)
Or something in between.
These are imho nice applications of the set type.
Gregor
kirby urner schrieb:
Yes, note that my Pascal's includes it, with an embedded zip. Another
place list comprehension comes up is in our naive definition of
totatives as:
def totative(n):
return [ t for t in range(1, n) if gcd(t, n) == 1]
i.e. all 0 < t < n such that (t, n) have no factors in common (are
relatively prime). Then our totient function is simply the len of
this list, giving us a quick way to assert (test) Euler's theorem: b
** totient(d) % d == 1 where gcd(b,d)==1. There's an easy enough
proof in 'Number' by Midhat Gazale, a must have on our syllabus (I'm
suggesting).
Kirby
On Thu, Jan 15, 2009 at 6:35 AM, michel paul <[email protected]
<mailto:[email protected]>> wrote:
I like this.
I think another 'must include' for math classes would be list
comprehension syntax. Not an algorithm in itself, but an
important way of thinking. It's what we try to get them to do
using set notation, but in math classes it seems simply like a
formality for describing domains, nothing more. In Python, it
DOES stuff.
- Michel
2009/1/14 kirby urner <[email protected]
<mailto:[email protected]>>
Candidates:
"Must include" would be like an intersection of many sets in a
Venn Diagram, where we all gave our favorite movies and a very
few, such as 'Bagdad Cafe' or 'Wendy and Lucy' or... proved
common to us all (no suggesting those'd be -- just personal
favorites).
In this category, three candidates come to mind right away:
Guido's for the gcd:
def gcd(a,b):
while b:
a, b = b, a % b
return a
Then two generics we've all seen many times, generators for
Pascal's Triangle and Fibonacci Sequence respectively:
def pascal():
"""
Pascal's Triangle **
"""
row = [1]
while True:
yield row
row = [ a + b for a, b in zip( [0] + row, row + [0] ) ]
and:
def fibonacci(a=0, b=1):
while True:
yield a
a, b = a + b, a
IDLE 1.2.1
>>> from first_steps import *
>>> gcd(51, 34)
17
>>> g = pascal()
>>> g.next()
[1]
>>> g.next()
[1, 1]
>>> g.next()
[1, 2, 1]
>>> g.next()
[1, 3, 3, 1]
>>> f = fibonacci()
>>> f.next()
0
>>> f.next()
1
>>> f.next()
1
>>> f.next()
2
>>> f.next()
3
>>> f.next()
5
Check 'em out in kid-friendly Akbar font (derives from Matt
Groening of Simpsons fame):
http://www.wobblymusic.com/groening/akbar.html
http://www.flickr.com/photos/17157...@n00/3197681869/sizes/o/
( feel free to link or embed in your gnu math website )
I'm not claiming these are the only ways to write these. I do
think it's a feature, not a bug, that I'm eschewing recursion
in all three. Will get to that later, maybe in Scheme just
like the Scheme folks would prefer (big lambda instead of
little, which latter I saw put to good use at PPUG last night,
well attended (about 30)).
http://mybizmo.blogspot.com/2009/01/ppug-2009113.html
Rationale:
In terms of curriculum, these belong together for a host of
reasons, not just that we want students to use generators to
explore On-Line Encyclopedia of Integer Sequences type
sequences. Pascal's Triangle actually contains Fibonaccis
along successive diagonals but more important we're laying the
foundation for figurate and polyhedral ball packings ala The
Book of Numbers, Synergetics, other late 20th century
distillations (of math and philosophy respectively).
Fibonaccis converge to Phi i.e. (1 + math.sqrt(5) )/2. gcd
will be critical in our relative primality checks, leading up
to Euler's Theorem thence RSA, per the review below (a
literature search from my cube at CubeSpace on Grand Ave):
http://cubespacepdx.com/
http://mathforum.org/kb/thread.jspa?threadID=1885121&tstart=0
<http://mathforum.org/kb/thread.jspa?threadID=1885121&tstart=0>
http://www.flickr.com/photos/17157...@n00/3195148912/
Remember, every browser has SSL, using RSA for handshaking, so
it's not like we're giving them irrelevant info. Number
theory goes into every DirecTV box thanks to NDS, other
companies making use of this powerful public method.^^
You should understand, as a supermarket manager or museum
administrator, something about encryption, security, what's
tough to the crack and what's not. The battle to make RSA
public property was hard won, so it's not like our public
school system is eager to surrender it back to obscurity.
Student geek wannabes perk up at the thought of getting how
this works, not hard to show in Javascript and/or Python.
Makes school more interesting, to be getting the low-down.
By the same token, corporate trainers not having the luxury of
doing the whole nine yards in our revamped grades 8-12, have
the ability to excerpt specific juicy parts for the walk of
life they're in.
Our maths have a biological flavor, thanks to Spore, thanks to
Sims. We do a Biotum class almost right away ("Hello World"
is maybe part of it's __repr__ ?). I'm definitely tilting
this towards the health professions, just as I did our First
Person Physics campaign (Dr. Bob Fuller or leader, University
of Nebraska emeritus).
The reason for using bizarre charactersets in the group theory
piece is we want to get their attention off numbers and onto
something more generic, could be pictograms, icons, pictures
of vegetables...
Feedback welcome,
Kirby
** http://www.flickr.com/photos/17157...@n00/3198473850/sizes/l/
^^
http://www.allbusiness.com/media-telecommunications/telecommunications/5923555-1.html
_______________________________________________
Edu-sig mailing list
[email protected] <mailto:[email protected]>
http://mail.python.org/mailman/listinfo/edu-sig
------------------------------------------------------------------------
_______________________________________________
Edu-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/edu-sig
_______________________________________________
Edu-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/edu-sig