查找可被5整除的数字的程序

时间:2015-11-27 17:33:46

标签: python python-2.7 math mathematical-optimization

我想制作一个程序,找出一个数字可以被3或5整除的数量,例如10有3 9 6可被3整除,有5和10可被5整除所以总数是5等等所以我写我的代码

import math
n=float(raw_input())
div3=(n-2)/3
div5=(n-4)/5
f1=math.ceil(div3)
f2=math.ceil(div5)
sumss=f1+f2
print int(sumss)

但是在某些数字中它会得到错误的答案并且输入数字的范围将是 从1到10 ^ 18所以我需要在其中使用数学因为问题测试的时间限制是2秒任何一个有任何有效的方程式使得循环不能使它花费很长时间

2 个答案:

答案 0 :(得分:2)

这可能是一个项目欧拉问题。问题是35可以分享一些号码。例如22

3的除数:3 6912 15 ,{{1 },18

21的除数:5 5 10 15

两个20都出现了,所以你进行了重复计算。

优点是153是相对素数,因此共享的唯一数字是5可分割的数字。所以你只需要撤消重复计算:

15

如果您允许重复计算n=int(raw_input()) div3=n//3 div5=n//5 div15=n//15 sumss=div3+div5-div15 print sumss 应计算两次),您只需使用:

15

请注意,程序省略了浮点运算:这将导致更快和更精确的程序,因为浮点数与有限的mantisse一起使用,因此无法正确表示大数(由于小错误导致)。此外,通常整数运算更快。

Project Euler#1

现在,Project Euler的问题陈述有点不同:它要求总结这些数字。为了做到这一点,你必须构造一个表达式来总结 l 的第一个 k 倍数:

n=int(raw_input())
div3=n//3
div5=n//5
sumss=div3+div5
print sumss

使用 Wolfram Alpha ,获得this expression。所以你可以将它们计算为:

 k
---
\
/     l*i
---
i=1

此计划为def suml (k,l) : return k*(k+1)*l/2 n=int(raw_input()) div3=n//3 div5=n//5 div15=n//15 sumss=suml(div3,3)+suml(div5,5)-suml(div15,15) print sumss 提供了119,如果您只计算一次n=22,那么您可以在上面进行验证。

答案 1 :(得分:1)

我不确定我的问题是否正确,但这里有一些想法:

n=float(raw_input())
div3=int(n/3)
div5=int(n/5)
div15=int(n/15)
sumss=div3+div5-div15
print sumss
编辑:啊,找到了Euler项目。

  

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

     

查找低于1000的3或5的所有倍数的总和。

这是一个不同的任务,然后在这里发布的问题。它表示吼叫数字,并找到总和

我不确定在这里发布解决方案是否正确,所以我宁愿不这样做。

EDIT2:来自Project Euler:

  

我们希望您喜欢解决这个问题。请不要剥夺   其他人通过发布您的解决方案来完成相同的过程   项目欧拉之外。如果您想分享您的见解,请   转到讨论论坛中的第1个帖子。