Google 网上论坛不再支持新的 Usenet 帖子或订阅项。历史内容仍可供查看。

Regular Expression for Prime Numbers (or How I came to fail at them, and love the bomb)

已查看 5 次
跳至第一个未读帖子

cokof...@gmail.com

未读,
2008年2月13日 10:31:292008/2/13
收件人
I was reading up on this site [http://www.noulakaz.net/weblog/
2007/03/18/a-regular-expression-to-check-for-prime-numbers/] of an
interesting way to work out prime numbers using Regular Expression.

However my attempts to use this in Python keep returning none
(obviously no match), however I don't see why, I was under the
impression Python used the same RE system as Perl/Ruby and I know the
convert is producing the correct display of 1's...Any thoughts?

def re_prime(n):
import re
convert = "".join("1" for i in xrange(n))
return re.match("^1?$|^(11+?)\1+$", convert)

print re_prime(2)

Also on a side note the quickest method I have come across as yet is
the following

def prime_numbers(n):
if n < 3: return [2] if n == 2 else []
nroot = int(n ** 0.5) + 1
sieve = range(n + 1)
sieve[1] = 0
for i in xrange(2, nroot):
if sieve[i]:
sieve[i * i: n + 1: i] = [0] * ((n / i - i) + 1)
return [x for x in sieve if x]

Damn clever whoever built this (note sieve will produce a list the
size of your 'n' which is unfortunate)

Carsten Haese

未读,
2008年2月13日 10:48:462008/2/13
收件人 pytho...@python.org
On Wed, 2008-02-13 at 07:31 -0800, cokof...@gmail.com wrote:
> return re.match("^1?$|^(11+?)\1+$", convert)

That needs to be either

return re.match(r"^1?$|^(11+?)\1+$", convert)

or

return re.match("^1?$|^(11+?)\\1+$", convert)

in order to prevent "\1" from being read as "\x01".

--
Carsten Haese
http://informixdb.sourceforge.net


Rafael Sachetto

未读,
2008年2月13日 11:32:492008/2/13
收件人 pytho...@python.org
with this works:

return re.match(r"^1?$|^(11+?)\1+$", convert)

but it match the non-prime numbers. So re_prime(2) will return null
and re_prime(4) will return a match

2008/2/13, Carsten Haese <car...@uniqsys.com>:


> On Wed, 2008-02-13 at 07:31 -0800, cokof...@gmail.com wrote:

> > return re.match("^1?$|^(11+?)\1+$", convert)
>

> That needs to be either
>

> return re.match(r"^1?$|^(11+?)\1+$", convert)
>
> or


>
> return re.match("^1?$|^(11+?)\\1+$", convert)
>

> in order to prevent "\1" from being read as "\x01".
>
> --
> Carsten Haese
> http://informixdb.sourceforge.net
>
>

> --
> http://mail.python.org/mailman/listinfo/python-list
>


--
Rafael Sachetto Oliveira

Sir - Simple Image Resizer
http://rsachetto.googlepages.com

mensa...@aol.com

未读,
2008年2月13日 13:40:422008/2/13
收件人
On Feb 13, 9:48 am, Carsten Haese <cars...@uniqsys.com> wrote:

> On Wed, 2008-02-13 at 07:31 -0800, cokofree...@gmail.com wrote:
> >     return re.match("^1?$|^(11+?)\1+$", convert)
>
> That needs to be either
>
> return re.match(r"^1?$|^(11+?)\1+$", convert)
>
> or
>
> return re.match("^1?$|^(11+?)\\1+$", convert)
>
> in order to prevent "\1" from being read as "\x01".

But why doesn't it work when you make that change?

>
> --
> Carsten Haesehttp://informixdb.sourceforge.net

Reedick, Andrew

未读,
2008年2月13日 13:48:542008/2/13
收件人 mensa...@aol.com、pytho...@python.org
> -----Original Message-----
> From: python-list-bounces+jr9445=att...@python.org [mailto:python-
> list-bounces+jr9445=att...@python.org] On Behalf Of mensa...@aol.com
> Sent: Wednesday, February 13, 2008 1:41 PM
> To: pytho...@python.org
> Subject: Re: Regular Expression for Prime Numbers (or How I came to
> fail at them, and love the bomb)
>
> On Feb 13, 9:48 am, Carsten Haese <cars...@uniqsys.com> wrote:
> > On Wed, 2008-02-13 at 07:31 -0800, cokofree...@gmail.com wrote:
> > >     return re.match("^1?$|^(11+?)\1+$", convert)
> >
> > That needs to be either
> >
> > return re.match(r"^1?$|^(11+?)\1+$", convert)
> >
> > or
> >
> > return re.match("^1?$|^(11+?)\\1+$", convert)
> >
> > in order to prevent "\1" from being read as "\x01".
>
> But why doesn't it work when you make that change?


It does work. Read the referenced website.

If there is a match then
the number isn't prime
else # no match
the number is prime.

*****

The information transmitted is intended only for the person or entity to which it is addressed and may contain confidential, proprietary, and/or privileged material. Any review, retransmission, dissemination or other use of, or taking of any action in reliance upon this information by persons or entities other than the intended recipient is prohibited. If you received this in error, please contact the sender and delete the material from all computers. GA622


Carsten Haese

未读,
2008年2月13日 13:53:002008/2/13
收件人 pytho...@python.org
On Wed, 2008-02-13 at 10:40 -0800, mensa...@aol.com wrote:
> But why doesn't it work when you make that change?

I can't answer that question, because it *does* work when you make that
change.

mensa...@aol.com

未读,
2008年2月13日 14:11:132008/2/13
收件人
On Feb 13, 12:53 pm, Carsten Haese <cars...@uniqsys.com> wrote:

> On Wed, 2008-02-13 at 10:40 -0800, mensana...@aol.com wrote:
> > But why doesn't it work when you make that change?
>
> I can't answer that question, because it *does* work when you make that
> change.

Well, the OP said the function was returning None which meant
no match which implies None means composite for the given example 2.

If None was supposed to mean prime, then why would returing None
for 2 be a problem?

But isn't this kind of silly?

## 3 None
## 4 <_sre.SRE_Match object at 0x011761A0>
## 5 None
## 6 <_sre.SRE_Match object at 0x011761A0>
## 7 None
## 8 <_sre.SRE_Match object at 0x011761A0>
## 9 <_sre.SRE_Match object at 0x011761A0>
## 10 <_sre.SRE_Match object at 0x011761A0>
## 11 None
## 12 <_sre.SRE_Match object at 0x011761A0>
## 13 None
## 14 <_sre.SRE_Match object at 0x011761A0>
## 15 <_sre.SRE_Match object at 0x011761A0>
## 16 <_sre.SRE_Match object at 0x011761A0>
## 17 None
## 18 <_sre.SRE_Match object at 0x011761A0>
## 19 None

>
> --
> Carsten Haesehttp://informixdb.sourceforge.net

subeen

未读,
2008年2月13日 14:36:002008/2/13
收件人
hmm... interesting

here is another way you can find prime numbers
http://love-python.blogspot.com/2008/02/find-prime-number-upto-100-nums-range2.html

casti...@gmail.com

未读,
2008年2月13日 17:14:572008/2/13
收件人
On Feb 13, 9:48 am, Carsten Haese <cars...@uniqsys.com> wrote:
> On Wed, 2008-02-13 at 07:31 -0800, cokofree...@gmail.com wrote:
> >     return re.match("^1?$|^(11+?)\1+$", convert)
>
> That needs to be either
>
> return re.match(r"^1?$|^(11+?)\1+$", convert)
>
> or
>
> return re.match("^1?$|^(11+?)\\1+$", convert)
>
> in order to prevent "\1" from being read as "\x01".
>
> --
> Carsten Haesehttp://informixdb.sourceforge.net

re.match(r"^(oo+?)\1+$", 'o'*i ) drops i in [0,1]

and

re.match(r"^(ooo+?)\1+$", 'o'*i ), which only drops i in [0,1,4].

Isn't the finite state machine "regular expression 'object'" really
large?

Mark Dickinson

未读,
2008年2月13日 18:43:202008/2/13
收件人
On Feb 13, 5:14 pm, castiro...@gmail.com wrote:
> Isn't the finite state machine "regular expression 'object'" really
> large?

There's no finite state machine involved here, since this isn't a
regular expression in the strictest sense of the term---it doesn't
translate to a finite state machine, since backreferences are
involved.

Mark

casti...@gmail.com

未读,
2008年2月13日 21:05:472008/2/13
收件人

What is it?

cokof...@gmail.com

未读,
2008年2月14日 03:33:052008/2/14
收件人
> hmm... interesting
>
> here is another way you can find prime numbershttp://love-python.blogspot.com/2008/02/find-prime-number-upto-100-nu...
>

Sadly that is pretty slow though...

If you don't mind readability you can make the example I gave into
five lines.

def p(_):
if _<3:return[2]if _==2 else[]
a,b,b[1]=int(_**0.5)+1,range(_+1),0
for c in xrange(2,a):
if b[c]:b[c*c:_+1:c]=[0]*((_/c-c)+1)
return[_ for _ in b if _]

But then, I would have to kill you...

bearoph...@lycos.com

未读,
2008年2月14日 06:26:242008/2/14
收件人
cokofree:

> Sadly that is pretty slow though...

It's quadratic, and it's not even short, you can do (quadratic still):

print [x for x in range(2, 100) if all(x%i for i in range(2, x))]

In D you can write similar code.
Bye,
bearophile

casti...@gmail.com

未读,
2008年2月14日 12:35:232008/2/14
收件人

all(x%i ha

0 个新帖子