Message from discussion bit count or bit set && Python3
Received: by 10.66.72.42 with SMTP id a10mr5756282pav.34.1351209010086;
Thu, 25 Oct 2012 16:50:10 -0700 (PDT)
From: Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info>
Subject: Re: bit count or bit set && Python3
References: <5089511E.firstname.lastname@example.org> <email@example.com>
Date: 25 Oct 2012 23:48:35 GMT
Organization: Unlimited download news at news.astraweb.com
Content-Type: text/plain; charset=UTF-8
On Thu, 25 Oct 2012 14:20:00 -0600, Ian Kelly wrote:
> On Thu, Oct 25, 2012 at 2:00 PM, Neil Cerutti <ne...@norwich.edu> wrote:
>> Yes indeed! Python string operations are fast enough and its arithmetic
>> slow enough that I no longer assume I can beat a neat lexicographical
>> solution. Try defeating the following with arithmetic:
>> def is_palindrom(n):
>> s = str(n)
>> return s = s[::-1]
> Problems like these are fundamentally string problems, not math
> problems. The question being asked isn't about some essential property
> of the number, but about its digital representation.
Speaking as somebody who sometimes pretends to be a mathematician, I
think you are wrong there. The property of being a palindrome may have
been invented in reference to strings, but it is also a mathematical
property of a number. Properties of the digits of numbers are properties
of the relationship between the number and some sequence of divisors (the
powers of some base), which makes them numeric properties.
It's interesting to consider properties of numbers which hold for *every*
base. For example, I understand that the digits of pi are uniformly
distributed regardless of which base you use.
Certainly mathematicians frequently ask questions about the digits of
numbers, generally in base ten but also in other bases. Since the digits
of a number are based on the numeric properties of the number, they
certainly are essential to the number (modulo some base).
For example, apart from two itself, every prime number ends in a 1 bit
in base two. In decimal, every factorial greater than 4! ends with a
zero. A number is divisible by 9 if the sum of the (decimal) digits
reduces to 9. A number is divisible by 5 if the last digit is 0 or 5.
These are not accidents, they depend on the numeric properties.
> Certainly they can
> be reasoned about mathematically, but the fact remains that the math
> being done is about the properties of strings.
Strings of digits, which are numerically equal to the remainders when you
divide the number by successively larger powers of some base.:
123 = 1*10**2 + 2*10**1 + 3*10**0
Of course, none of this challenges the fact that, at least in Python,
reasoning about digits is often best done on the string representation
rather than the number itself.
 Which makes 2 the oddest prime of all.