**1) The sum of all integers from 1 to n**

triangle = lambda n: n*(n+1)/2

**2) Factorial**

factorial = lambda n: 1 if n<2 else n*factorial(n-1)

**3) Get odd numbers**

odds = lambda n: [k for k in range(1,n,2)]

**4) Test whether a number is prime**

is_prime = lambda n: False if n<2 else (0 not in [n%k for k in range(2,int(n**.5)+1)])A number is prime when it has no factor other than 1 and itself. To determine whether the number is a prime, we need to check that it doesn't leave a reminder of 0 when divided by each number in the range of [2..square root of the number].

**5) Primes sieve**

This function returns the list of primes in the range [2..N]. It's the most cryptic of all but it makes use of the previous function to add a number to the generated list.

sieve = lambda n: [k for k in range(2,n+1) if (0 not in [k%i for i in range(2,int(k**.5)+1)])]It could also be written as:

is_prime = lambda n: False if n<2 else (0 not in [n%k for k in range(2,int(n**.5)+1)])

sieve = lambda n: [k for k in range(2,n+1) if is_prime(k)]

Why not "triangle = lambda n: n*(n+1)/2"?

ReplyDeleteThat way you don't have to do that clumsy floating point division and int conversion?

I agree with you on that. I've just updated it. I'm also busy writing a sequel to this entry.

ReplyDelete