蓝桥 python 模拟赛_题目2——枚举_公约数 [简单又粗暴]

本文介绍了博主柠檬斐林在解决蓝桥杯模拟题时,采用暴力搜索(暴搜)方法找出1到2021间与2021存在大于1公约数的整数个数。通过两个循环和一个if条件,结合集合避免重复,最终得出答案89,并通过检验确认了结果的正确性。文章探讨了简单易懂的解题思路和代码实现。
摘要由CSDN通过智能技术生成

🥛宁好,我是柠檬斐林,欢迎一起交流

在这里插入图片描述

🥛 前头

最近刷蓝桥杯模拟题时刷到一道感觉可以更简单易懂的题,虽然大佬不是这样做的,

再次觉得暴搜的妙处(当然暴搜也是有技巧的,否则超时🤣)

🥛题目

如果一个整数 g 能同时整除整数 A 和 B,则称 g 是 A 和 B 的公约数。例如:43 是 86 和 2021 的公约数。

请问在 1(含) 到 2021(含) 中,有多少个数与 2021 存在大于 1 的公约数。

请注意 2021 和 2021 有大于 1 的公约数,因此在计算的时候要算一个。

🥛思路如下

写完后再看别人的觉得自己的还好理解一点(其实是更简单粗暴😁((供参考😬)),

简而言之,就是两个循环加一个if语句,当然还要设置一个不重复集合set,

只有两个for,不用太担心超时,为了保险起见(继续简化)

🥛原写法

某国奖学长已经整理好,(给出最大公约数的迭代和递归写法(分别用函数表示)),

然后再用枚举列出加一循环即可。

【蓝桥杯】国奖学长带你复盘第十三届蓝桥杯模拟赛

🥛代码

sun=0
a=set()
b=set()
for i in range(1,2022):
    for j in range(2,i+1):  #i+1也可以设置为2021,为了减少内存使用故用i+1
        if 2021%j==0 and i%j==0:
            sun+=1
            a.add(i)  #所求个数
            b.add(j)  #所有公约数
#print(sun)
print(len(a))

🥛评测结果与检验

答案:89

为了使结果更加确信,进行如下检验:

import numpy as np
a=list(a)
c=np.array(a)
#print(b)
#发现只有三个公约数:43、47、2021
print(c%43)
print(c%47)#有时间的话可以写个函数使集合里的约数全为0

如下:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值