5-8能被3,5和7整除的数的个数(用集合实现)

求指定区间内能被3,5和7整除的数的个数

输入格式:

在一行中从键盘输入2个正整数a,b(1<=a<b<=10000000),用空格隔开。

输出格式:

在一行输出大于等于a且小于等于b的能被3,5和7整除的数的个数。

这是一开始做的,没有注意大题目需要用集合实现,不过运行起来也是对的。

python 复制代码
a,b=list(map(int,input().split()))
f=False
total=0
for i in range(a,b+1):
    if i%3==0 and i%5==0 and i%7==0:
        total+=1
        f=True
if not f:
    print("0")
else:
    print(total)

后面想在原题的基础上略微改一下:

python 复制代码
a,b=list(map(int,input().split()))
s=set(range(a,b+1))#或者s={x for x in range(a,b+1)}
total=0
f=False
for i in s:
    if i%3==0 and i%5==0 and i%7==0:
        total+=1
        f=True
if not f:
    print("0")
else:
    print(total)

虽然运行结果是正确的,但是把(1<=a<b<=10000000)存入集合里会内存很大,所以最后题报了内存超限。

python 复制代码
a,b=list(map(int,input().split()))
s=set()
f=False
for i in range(a,b+1):
    if i%3==0 and i%5==0 and i%7==0:
        s.add(i)
        f=True
if not f:
    print("0")
else:
    print(len(s))

上面这个代码是完全正确的。

python 复制代码
a,b=list(map(int,input().split()))
s=set()
f=False
start=(a+104)//105*105
for i in range(start,b+1,105):
    s.add(i)
    f=True
if not f:
    print("0")
else:
    print(len(s))

虽然正确,但是运行速度太慢,所以进行了修改,3.5.7的最小公倍数是105,所以有了start=(a+104)//105*105这一步,意思是第一个>=a的105倍数。但不能直接(a,b,105),因为不能保证a一开始就是105的倍数。

python 复制代码
import math
a,b=list(map(int,input().split()))
s=set()
f=False
start=math.ceil(a/105)*105
for i in range(start,b+1,105):
    s.add(i)
    f=True
if not f:
    print("0")
else:
    print(len(s))

还可以引入math函数,ceil的意思是向上取整,//的意思是向下取整,举个例子假设a是104或105

当104时,在start=(a+104)//105*105中,先对1.9进行向下取整到1,再1*105,

在math.ceil(a/105)*105中,start是先对0.99向上取整到1,再*105。

之所以在start=(a+104)//105*105中是加104,而非105,因为若是a初始就为105,会变为210//105=2*105,这样在for i in range(start,b+1,105):里就不对了,本来初始是105的,现在变为210,会使最后结果少统计。

英文 含义 Python实现
floor 向下取整(取 ≤ x 的最大整数) int(x) 或 math.floor(x)
ceil 向上取整(取 ≥ x 的最小整数) math.ceil(x)
相关推荐
可乐ea14 分钟前
从第一性原理构建 AI Agent:提示词、工具、技能与记忆全解剖
数据库·人工智能·工具调用·ai智能体·提示词工程·agent开发·智能体记忆
打工仔折腾 AI17 分钟前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
东方护航数据恢复(深圳)31 分钟前
医疗案例:HIS/PACS 数据库页损坏修复,医院不停诊完成恢复【东方护航数据恢复深圳店】
数据库·数据恢复·医疗·二次开盘
梦幻精灵_cq43 分钟前
sumdir——一个伪python.built-in的“术法”打造
python
星栈43 分钟前
pnpm 12 升级实测
前端·javascript
Sirens.1 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
Ai-_Man1 小时前
您您这可以把Microsofat Copilot的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭
javascript·人工智能·ai·小程序·电脑·copilot
lusklusklusk2 小时前
Oracle数据库基础之11_Duplicate和Dataguard和RAC
数据库·oracle
weixin_440730502 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python
天赐范式2 小时前
天赐范式第181天:让视图开始切换——PBFT视图切换与从safety到liveness的跨越
python·pbft·数字生命·天赐范式·动态运行时·拜占庭容错