http://projecteuler.net/problem=1
简而言之,我正在尝试编写一个脚本,它将找到低于1000的3或5的所有倍数的总和.
我的(非常基本的)方法是使用这个程序:
##Multiples of 3x = range(3,1000,3)##Multiples of 5y = range(5,5)a = sum(x)b = sum(y)n = a + bprint n
我意识到这是错误的,因为有15个数字被包含两次(它是5和3的倍数).
那么有没有办法解决这个问题,还是我从一个完全错误的角度来解决这个问题?
或者在尝试解决此问题之前,我是否需要更多地学习?
如果在之前的帖子中已经解释过这个问题,我也很抱歉,但我看了一下.
##Multiples of 3x = range(3,5)##multiple of 15 are counted twicez=range(15,15)a = sum(x)b = sum(y)c = sum(z)n = a + b -cprint(n)
但美在于使用发电机或列表理解
a = sum(i for i in range(1000) if i%3 == 0 or i%5 == 0 )print(a)
其中%是modulo并且是整数偏差的余数.
关于这一点的好处是代码读得如此流畅,并且是规则的直接翻译,可以从左到右阅读.
在这种情况下,两种算法运行时间取决于n是1000.如果n将是例如1000000000,则必须等待很长时间才能完成.如果你应用小数学,你可以找到它
sum(a for a in range(a1,a2,n))
实际上是arithmetic progression,无论n多大,都可以在恒定时间内计算出总数. http://en.wikipedia.org/wiki/Project_Euler#Example_problem_and_solutions
总结以上是内存溢出为你收集整理的使用python,如何合并或连接两个列表,以便它们的值不重叠?全部内容,希望文章能够帮你解决使用python,如何合并或连接两个列表,以便它们的值不重叠?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)