我最近开始编程,我的第一语言是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 如何更正答案,实际上它忽略了倍数的定义。
或许我错误地假设了倍数是多少。请帮帮我。
谢谢。
答案 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的倍数。