The day conference in Pasadena passed symmetrically, and at dusk I cruised west on the 10 to Santa Monica. I hit Magdelene’s for the only real Mexican food in West L.A, then turned north on PCH.

There was a shabby bar with jukebox I knew, right on the beach, where I could ponder the floating silver coins of moonlight on ocean, and think of that one girl so far away.

If you spend time in surfer hangouts, eventually you’ll find yourself in some kind of confrontation.

The argument started over best Baja breaks. Pounding the bar, I tried to put words to the catch in my heart I felt in every moment at Todos Santos. My buddy droned on about some mush beach I’d never heard of, where he’d “shredded” five or six waves in one storm back in December. He’d met a Reef model there. And oh yeah, the fish tacos were “killer”.

It was all downhill from there. We started arguing about “proof” and the “scientific method” and other gibberish, on and on, inevitably, to number theory.

The bar got perceptibly quieter.

I offered up Euclid’s proof of the infinity of primes -

Pick a prime, any prime greater than 2. Call it the largest possible prime. Multiply together all the primes less than or equal to that largest prime, and add 1 to the product. Now, this new number can’t be factored by the largest possible prime or any lesser primes (because we added 1 to the product). So it is either a larger prime itself, or it has a prime factor larger than what we started out calling the largest possible prime. No matter what prime number you pick, we find one larger.

It was nothing but white-noise-surf-hiss to my friend. I fetched the laptop from the truck and saw the low clouds drifting before the moon. When I walked back in, the jukebox was playing *Toulouse Street*, and bang….there was that catch in my heart once more.

I asked him to pick a prime, any prime. *Madre de Dios*, the only one he could think of was 19. *Mas cerveza, por favor.*

:load Primes.hs

:load Factoring.hs

*Factoring> let primes = find_p [ 2.. ] where find_p (p:x) = p : find_p [ n | n <- x, n `mod` p > 0 ]

*Factoring> let p = take 100 primes

*Factoring> [n | n<-p, n<100]

[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] *Factoring> foldr (*) 1 [n | n<-p, n<20] + 1 9699691 *Factoring> isPrime 9699691 False *Factoring> factors 9699691 [347,27953] *Factoring>

“So our new number is 9699691,” I said. “It ain’t a prime, and when we factor it, we get two numbers, 347 and 27953 – both larger than 19.”

The barkeep served. My friend sieved. In a minute he came up with another prime: 97.

*Factoring> foldr (*) 1 [n | n<-p, n<98] + 1 2305567963945518424753102147331756071 *Factoring> isPrime 2305567963945518424753102147331756071 False *Factoring> factors 2305567963945518424753102147331756071 [2336993,13848803,71237436024091007473549] *Factoring>

Before we could begin exploring the nether-regions of factoring efficiency he grew sullen, but bought me another Corona.

I left him there at 2:00 AM. He was humming “Flight of the Valkyries” under his breath, and muttering phrases like “Epistemologists don’t surf.”

I drove north into the night, hoping for a new day of green rooms.