给定若干个整数,请你找到这些整数中第一个能同时被3、5、7整除的数,如果有则输出这个数,没有输出 no。
时间: 2024-05-03 10:21:34 浏览: 130
能被3,5,7整除的数
一种思路是使用循环依次判断每个整数是否满足条件,但这样的时间复杂度较高,不够高效。另一种思路是通过数学方法直接计算出满足条件的数,这样的时间复杂度较低。
首先,可以发现满足条件的数必定是 3、5、7 的倍数,因此可以将问题转化为求最小的同时是 3、5、7 的倍数的数。
其次,可以发现满足条件的数必定可以表示为 105 的倍数加上某个 3、5、7 的倍数,因此可以先计算出 105 的倍数,再依次加上 3、5、7 的倍数,直到找到满足条件的数或者已经超过了给定范围。
根据上述思路,可以编写如下代码:
```python
nums = [int(x) for x in input().split()]
# 计算最小的 105 的倍数
n = 105
while n <= max(nums):
if all([n % x == 0 for x in [3, 5, 7]]):
break
n += 105
# 依次加上 3、5、7 的倍数
while n <= max(nums):
if all([n % x == 0 for x in [3, 5, 7]]):
print(n)
break
n += 3
if n > max(nums):
break
n += 2
if n > max(nums):
break
n += 2
print("no")
```
这里注意到在依次加上 3、5、7 的倍数时,可以先加上 3,再加上 2,再加上 2,这样可以保证依次加上的数都是奇数,从而提高效率。
阅读全文