python 编写简单方程

Python012

python 编写简单方程,第1张

函数名不能有#

所以:

#!python3

import re

def extract(s):

    return [i[1:] for i in re.findall(r'#\w+',s)]

print(extract('ABC #123ab! #abc'))

print(extract('ABC #123ab! #123ab! #abc'))

运行结果:

[willie@bogon ~]$ python3

Python 3.5.2 (default, Sep 30 2016, 01:32:24)

[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>>import re

>>>def extract(s):

... return [i[1:] for i in re.findall(r'#\w+',s)]

...

>>>extract('ABC #123ab! #abc')

['123ab', 'abc']

完全的暴力:

i=0

while (~i&1) or (i%3!=2) or (i%5!=4) or (i%6!=5):

    i+=7

print i

考虑数学上的优化——

设阶梯数为x,则可联立以下同余方程

x=1(mod 2)

x=2(mod 3)

x=4(mod 5)

x=5(mod 6)

x=0(mod 7)

前四个同余方程又可改写为:

x=2-1=-1(mod 2)

x=3-1=-1(mod 3)

x=5-1=-1(mod 5)

x=6-1=-1(mod 6)

联立得:x=-1(mod lcm(2,3,5,6)=30)

交上最后一个同余方程得:x%30==29且x%7==0

到这步时,便可以再打一个暴力:

i=0

while i%30!=29:

    i+=7

print i

考虑继续优化——

原同余方程又可改写为:

x=30*m+29(m∈N)

x=7*n(n∈N+)

联立得:

30*m+29=7*n

即:n=(30*m+29)/7=4*m+4+(2*m+1)/7

∵n∈N+

∴(2*m+1)/7∈N

∴m=3(mod 7)

∴m最小为3,n最小为17,x最小为119

于是有O(1)的程序:

print 119