项目Euler使用Python,关于倍数的定义

时间:2015-07-26 12:19:55

标签: python

我最近开始编程,我的第一语言是python。我只知道语言的基础知识,包括条件,循环,范围和其他一些功能。

我尝试使用python解决项目euler的问题1。问题陈述如下:

如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23。 找到1000或以下3或5的所有倍数的总和。

这是我的解决方案:

if type(x%3)==int or type(x%5)==int

我得到的答案是499500,这是错误的。我试着寻找答案,发现替换了我解决方案的第三行:

if x%3==0 or x%5==0

 $this->db->where('register.id !=', $id);

得出正确答案 233168。

为什么我的代码错了?据我所知,多重不需要将余数留为零。例如,255是5的倍数。但255%5不会将余数保留为零。那么行如果x%3 == 0或x%5 == 0 如何更正答案,实际上它忽略了倍数的定义。

或许我错误地假设了倍数是多少。请帮帮我。

谢谢。

2 个答案:

答案 0 :(得分:0)

原始代码的问题在于Modulo operation具有自然数,总是会产生自然数。

print type(4%3)
#print <type 'int'>
print type(4%3)==int
#print True

所以,你正在做的基本上是将0到1000之间的所有数字相加:

print sum(range(0,1000,1))
#prints 499500 

希望有所帮助

答案 1 :(得分:0)

a是b iff a = k b的倍数,k为整数。然后%是模数,其定义如下:

a % b = z iff a = k b + z with k (and z) integers (and 0 <= z < b)

因此,如果z= 0,则a = k b和a是b的倍数。