鱼C论坛

 找回密码
 立即注册
查看: 3779|回复: 9

[已解决]测试2:判断是否能被xxx整除

[复制链接]
发表于 2023-1-6 15:44:58 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 KeyError 于 2023-1-7 11:26 编辑

请大家做出判断输入数据是否能被 xx 整除的程序 (不能有 %) 。
xx 的值:
简单 .2, 5
普通 .3, 9
困难 .7, 11

格式:
  1. 程序: xx
  2. 代码
复制代码


进阶: 时间复杂度为 O(k) (常数)
最佳答案
2023-1-6 15:44:59
  1. def foo(a, b):
  2.     while b >= a:
  3.         b -= a
  4.     return not b

  5. # foo = lambda a, b: foo(a, b - a) if b >= a else not b 这是一行式代码题解

  6. print(foo(13, 39)) # 13 被 39 整除
  7. print(foo(5, 128)) # 5 不能被 128 整除
复制代码
  1. True
  2. False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 15:44:59 | 显示全部楼层    本楼为最佳答案   
  1. def foo(a, b):
  2.     while b >= a:
  3.         b -= a
  4.     return not b

  5. # foo = lambda a, b: foo(a, b - a) if b >= a else not b 这是一行式代码题解

  6. print(foo(13, 39)) # 13 被 39 整除
  7. print(foo(5, 128)) # 5 不能被 128 整除
复制代码
  1. True
  2. False
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-6 15:46:02 | 显示全部楼层
本帖最后由 KeyError 于 2023-1-6 15:49 编辑


是育碧不够高吗,咋没在主页看见。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 15:57:24 | 显示全部楼层
没看懂题目,举例说明
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 16:02:48 | 显示全部楼层
输入除数,被除数(2,3,5,7,9,11之一)
如果除数 整除 被除数 在乘以被除数 等于 除数
则说明可以整除。
否则不能整除。

大体是这样的思路,不会py就不贴代码了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 16:07:30 | 显示全部楼层
  1. def idiv(a,b):
  2.     if a//b*b==a:
  3.         return 1
  4.     else:
  5.         return 0
复制代码

评分

参与人数 1鱼币 +5 收起 理由
KeyError + 5 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-6 18:03:06 | 显示全部楼层
额,忘说了也不能用 *, / 和 // 。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 18:44:12 From FishC Mobile | 显示全部楼层
KeyError 发表于 2023-1-6 18:03
额,忘说了也不能用 *, / 和 // 。

乘法,除法都不能用,那就是只能用最基本的加法了呗。不算0的情况,先做比较(除数要较小才可能有整除的可能。若除数较大显然不会有整除,返回False),如果是较小,那就反复加除数,一直加到 等于被除数(可以被整除,返回True),或大于被除数(无法整除,返回False)。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-6 20:04:04 | 显示全部楼层
KeyError 发表于 2023-1-6 18:03
额,忘说了也不能用 *, / 和 // 。

首先加法肯定得能用
减法可以用加法模拟
乘法也可以用加法模拟
除法用乘法模拟

  1. #!/usr/bin/env python
  2. #coding=utf-8

  3. import itertools

  4. def add(a, b): return a + b

  5. def sub(a, b): return add(a, -b)

  6. def mul(a, b):
  7.     result = 0
  8.     for i in range(0, b): result = add(result, a)
  9.     return result;

  10. def div(a, b):
  11.     for i in itertools.count(1):
  12.         if mul(i, b) > a: return sub(i, 1)

  13. def mod(a, b): return sub(a, mul(div(a, b), b))

  14. print(add(10, 3))
  15. print(10 + 3)

  16. print(sub(10, 3))
  17. print(10 - 3)

  18. print(mul(10, 3))
  19. print(10 * 3)

  20. print(div(10, 3))
  21. print(10 // 3)

  22. print(mod(10, 3))
  23. print(10 % 3)

  24. print(add(12, 3))
  25. print(12 + 3)

  26. print(sub(12, 3))
  27. print(12 - 3)

  28. print(mul(12, 3))
  29. print(12 * 3)

  30. print(div(12, 3))
  31. print(12 // 3)

  32. print(mod(12, 3))
  33. print(12 % 3)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-7 10:54:01 | 显示全部楼层
  1. xx=int(input())
  2. if pow(xx,1,7):
  3.     print("no")
  4. else:
  5.     print("yes")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 12:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表