Euler第五题

Euler第五题:
求1到20各数的最小公倍数。
目前我用的方法是按照短除法求最小公倍数的方法做的。Euler给出的方法虽然原理基本搞懂,但是编程还没有实现。

——————————————————————————————————-
def primeNumber(k):
primes=[2,3,5,7,11,13,17,19]
number=21
while number<k:
flag=True
for prime in primes:
if number%prime==0:
flag=False
break
if flag:
primes.append(number)

number=number+2

return primes

def smallestMulti(z):
dividends=[]
for i in range(z):
dividends.append(i+1)
print(“{0}\n{1}”.format(dividends,”–“*2*len(dividends)))

dividers=primeNumber(z)
print(“{0}\n{1}”.format(dividers,”–“*2*len(dividers)))

divisors=[]

for divider in dividers:
flag=True
while flag:
for i in range(len(dividends)):
if dividends[i]%divider==0:
flag=True
divisors.append(divider)
break
else:
flag=False

for i in range(len(dividends)):
if dividends[i]%divider==0:
dividends[i]=dividends[i]//divider

# print(dividends)

print(“{0}\n{1}”.format(divisors,”–“*2*len(divisors)))

answer=1

for divisor in divisors:
answer=answer*divisor

return answer

if __name__==”__main__”:
from time import clock
start=clock()
z=20
# print(smallestMulti(z))
print(“The answer is: {0}\t\tRun time: {1:.6f}s”.format(smallestMulti(z),clock()-start))

————————————————————————————————————
结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
——————————————————————————–
[2, 3, 5, 7, 11, 13, 17, 19]
——————————–
[2, 2, 2, 2, 3, 3, 5, 7, 11, 13, 17, 19]
————————————————
The answer is: 232792560 Run time: 0.000390s

发表在 未分类 | 留下评论

Euler第四题

寻找一个最大的为两个3位数乘积的回文。

回文就是正着念,反着念相同的数或单词,如 9009 = 91×99。

__________________________________________________________________________________________

from time import clock

start=clock()

z=999

a=[0,0,0]

flag=False

for i in range(100000):

    a[0]=int(z/100)

    a[1]=int((z-100*a[0])/10)

    a[2]=int(z-100*a[0]-10*a[1])

    palindrome=100000*a[0]+10000*a[1]+1000*a[2]+100*a[2]+10*a[1]+a[0]

    #print(palindrome)

    product=999

    for j in range(999):

        if palindrome/product<1000 and palindrome%product==0:

            print(“the answer is {0}={1}×{2}”.format(palindrome,product,int(palindrome/product)))

            flag=True

            break

        product=product-1

    z=z-1

    if flag==True or palindrome<0: break

print(“{0:5f}s”.format(clock()-start))

_________________________________________________________________________________________

这段代码执行结果大约需要0.057S。看了一下给出的答案,代码还可以优化一下。

关键在此处:

palindrome=100000*a[0]+10000*a[1]+1000*a[2]+100*a[2]+10*a[1]+a[0]

palindrome=100001*a[0]+10010*a[1]+1100*a[2]

palindrome=11(9091*a[0]+910*a[1]+100*a[2])

经过这个变化可以知道一个因数肯定是11的倍数。因此不需要在循环中一个一个试了。一个因数为11*j,并且j<91,因为当j大于等于91时,11*j>1000,不符合题目要求。

_________________________________________________________________________________________

优化代码:

    j=90

    while j>0:

        product=j*11

        if palindrome/product<1000 and palindrome%product==0:

            print(product)

            print(“the answer is {0}={1}×{2}”.format(palindrome,product,int(palindrome/product)))

            flag=True

            break

        j=j-1

_________________________________________________________________________________________

这段代码执行时间只需要0.0065s左右。

发表在 未分类 | 留下评论

Project Euler 第三题的一个nb算法

题目:求600851475143 的最大质因数。

搞了2,3个小时,搞出来的算法效率都很低。网上发现一个nb算法。改成python后如下:

————————————————————————————————————

def maxPrime():

n=600851475143

d=2

while d<n/d:

if n%d==0:

n=int(n/d)

else:

d=d+1

return n

if __name__==”__main__”:

from time import clock

start=clock()

finish=clock()

print(“the largest prime factor is {0}\t\t{1}s”.format(maxPrime(),(finish-start)/1000000))

————————————————————————————————————

结果:

the largest prime factor is 6857 4.462223927783368e-13s

————————————————————————————————————

哎,差距啊~

发表在 未分类 | 留下评论

[转]Chrome使用技巧-使用Google https(SSL)加密搜索

发表于 2010/05/26 由 麦子地

前面有两篇文章提到了如何通过扩展的方式让Firefox自动使用Google https加密搜索,在Chrome(Google浏览器)中使用Google https(ssl)加密搜索的设置相对来说更加简单。
Chrome有多种便捷的搜索方式,参见“Chrome使用技巧-搜索引擎的设置与使用方法”,其中最方便的莫过于在地址栏中输入关键词,回车后直接使用默认搜索引擎进行搜索。下面就介绍通过修改默认搜索引擎的办法让Chrome使用Google安全搜索。

1. 先测试一下能不能直接打开https://www.google.com,很可能会出现的问题是浏览器自动转向到谷歌香港http://www.google.com.hk
解决方法:先访问一次http://www.google.com/ncr ,以后再打开https://www.google.com或者http://www.google.com就不会再转向到谷歌香港了。

2. 在地址栏上点击鼠标右键,选择“修改搜索引擎”


3. 在“搜索引擎”窗口中,点击右侧的“添加”;

4. 将https://www.google.com添加到列表中。在窗口中填入以下内容

5. 确定后,在第2步中的界面右侧将其设置为默认搜索引擎。

按照上述四步设置完毕后,就可以直接使用能躲开第三方拦截的Google加密搜索了。

版权声明:本站原创文章可以任意转载,请务必完整保留以下版权信息:
转载自麦子地 链接地址: Chrome使用技巧-使用Google https(SSL)加密搜索

发表在 未分类 | 留下评论

ubuntu 下安装eclipse with python3.x

先装 python3,没啥好说的
再装eclipse:
1.  先在源里装eclipse。
2.  安装好eclipse之后:
        1)  Help->Install New Software…
        2)  点”Add”在弹出菜单里”Name”里填PyDev,位置里填http://pydev.org/updates,点OK。
        3)  在弹出菜单里选上PyDev,一路Next直到Finish。安装完会要重启一次eclipse。
3.  配置PyDev:
        1)  重启后打开eclipse,选Windows->Preferences.
        2)  在左边选Pydev->Interpreter – Python.
        3)  点New,在Interpreter里,Name填python3.x。 在Interpreter Executable点Browse,在/usr/bin里找到python3.x。点Open,点2次OK,点Apply。

4. 验证:
    1)  File->New->Pydev Project
    2)  Projcet Name填 pytest3.x,在Grammar Version选3.x。点完成。
    3)  在左边pytest3.x的文件夹上右键,New->File,吓填个名字.py,输入如print(‘Hello’),点F11,如果正常运行则配置OK了。 

菊子曰 写博客,就用菊子曰
发表在 ubuntu | 留下评论

Ubuntu下解决Thinkingrock 界面 和Report中 中文乱码的问题

Thinkingrock 是一款跨平台的GTD软件,他完全按照GTD思想来处理你的各种想法。整个流程分为收集,处理,组织,检查,做。

Thinkingrock是在netbeans基础上编写的,以此实现跨平台。但是在Ubuntu下使用免费版Thinkingrock 2.2.1时出现了如下图所示的情况,中文部分都变成了方框。

出现这样情况的原因是安装包中自带的jvm中的字体和系统字体并不相同。解决办法有两种:一个是把/usr/share/fonts/truetype/arphic中的字体复制到Thinkingrock目录中/jre/lib/fonts/fallback目录中。另一个是如果你在系统中安装了如永中office等带jvm的中文软件。可以修改Thinkingrock目录中etc子目录下的thinkingrock.conf。找到jdkhome,将其前面的#去掉并加上支持中文的jre所在路径。修改完成之后Thinkingrock就可以正常显示中文了。如下图。

 

Thinkingrock另一个功能就是输出PDF格式的报表,但他在生成带中文的报表时也出现中文乱码的问题。原因是Thinkingrock输出的PDF所带字体太少,不支持非英文语言。

先给Thinkingrock增加中文字体,我用的是文泉驿微米黑。

$ cd /tr-2.0.1/tr/resource/fop
$ ln -s /usr/share/fonts/truetype/wqy/wqy-microhei.ttc
$ java -cp ../../modules/ext/fop-0.93.jar:../../modules/ext/avalon-framework-4.2.0.jar:../../modules/ext/commons-logging-1.0.4.jar:../../modules/ext/commons-io-1.1.jar org.apache.fop.fonts.apps.TTFReader -ttcname “WenQuanYiMicroHei” wqy-microhei.ttc wqy-microhei.xml

用过这些命令之后在fop文件夹下就会出现wqy-microhei.ttc wqy-microhei.xml 这两个文件了。

接着修改fop文件夹下的fop.xconf文件。在文件中加上下面一段:

<!– WenQuanYi Micro Hei Font –>
<font metrics-url=”wqy-microhei.xml” kerning=”yes” embed-url=”wqy-microhei.ttc”>
<font-triplet name=”WenQuanYiMicroHei” style=”normal” weight=”normal”/>
</font>
<font metrics-url=”wqy-microhei.xml” kerning=”yes” embed-url=”wqy-microhei.ttc”>
<font-triplet name=”WenQuanYiMicroHei” style=”normal” weight=”bold”/>
</font>
<font metrics-url=”wqy-microhei.xml” kerning=”yes” embed-url=”wqy-microhei.ttc”>
<font-triplet name=”WenQuanYiMicroHei” style=”italic” weight=”normal”/>
</font>
<font metrics-url=”wqy-microhei.xml” kerning=”yes” embed-url=”wqy-microhei.ttc”>
<font-triplet name=”WenQuanYiMicroHei” style=”italic” weight=”bold”/>
</font>

完工之后就可以在Thinkingrock中Tools -> Options -> Miscellaneous -> Action Screens选择微米黑字体了。这样输出的中文报表就能正常显示了。

菊子曰 写博客,就用菊子曰
发表在 ubuntu | 留下评论

【转】keepass技巧——正确设定代码以避免输入错误

keepass技巧——正确设定代码以避免输入错误

    如何避免keepass输入错误{DELAY500}^+0{CLEARFIELD}{UserName}{TAB}{Password}。一般的,keepass输入要避免两个问题。第一个就是你必须关闭中文输入法。如果不关闭,那么输入的用户密码通通都到中文输入框里了,而不是在用户名和密码对应的网页文本框。但每次人工判别输入法是否打开是一件很繁琐的事情。所以可以让keepass在输入用户和密码前先关闭输入法,然后再调用用户名和密码。在xp下方调用输入法设置里。

   

    这里选择设置。

   

    这里选择简体中文-美式键盘。然后选择下方的键设置。

   
    这里找到切换至中文(中国)的热键。我设置的是ctr+shift+0。

    这个设置就是利用热键打开美式键盘,实质作用就是关闭中文输入法
{DELAY 500}^+0{CLEARFIELD}{UserName}{TAB}{Password}。开篇的这个keepass的输入序列中,^+0就是代表ctr+shift+0。 

    第二个要避免的就是网络延迟。通常出现的状况是用户名缺首字符。这是就要给个延迟来输入。上述代码先延迟0.5秒,然后关闭输入法,然后把用户名所在网页文本框清空。再输入用户名,tab,密码。另外,需要提醒的是,如果不设置延迟,clearfield这个清空文本框内容的命令在网络延迟下,会自动调用xp的任务管理器。

    以上代码,你可以设定为某个群组的默认代码。然后所有下面的条目都继承。这样管理起来就简单多了。

菊子曰 本文用菊子曰发布
发表在 计算机与 Internet | 留下评论