- 按键认证大神
- 2699998
- 3587
- 11
- 2173 朵
- 7386 个
- 1021 个
- 91120
- 2014-08-23
|
1#
t
T
发表于 2022-11-20 21:17
|
|只看楼主
题目描述 一个数字的真除数是除了自身之外的所有整除数的集合。例如,对于100,它们是1、2、4、5、10、20、25和50。 设 sum(n) 是 n 的这些真除数之和。将 buddy 称为两个正整数,这样每个数的真除数的和比另一个数多一个: (n,m)是一对伙伴,如果 sum(m)=n+1 和 sum(n)=m+1 例如,48和75就是这样一对: 48的除数是:1、2、3、4、6、8、12、16、24–>和:76=75+1 75的除数是:1、3、5、15、25–>和:49=48+1
【任务】 给定两个正整数 start 和 limit,函数 buddy(start,limit)应该返回buddy对的第一对(n m), 这样n(正整数)就在 start 和 limits 之间;m可以大于极限,并且必须大于n 如果没有满足条件的好友数据对,则返回 “Nothing”
【示例】: buddy(10,50)返回[48,75] buddy(48,50)返回[48,75]
题目难度:简单 题目来源:Buddy Pairs II | Codewars 题目交流: 584781753
|
- Import "SmAssert.dll"
- Function 好友数据对(开始数字, 结束数字)
- // 您的代码写在这里
- End Function
- SmAssert.That 好友数据对(10, 50), "=", Array(48, 75)
- SmAssert.That 好友数据对(2177, 4357), "=", "Nothing"
复制代码 参考题解- Import "SmAssert.dll"
- '求因子数
- Function factor(n)
- Dim res ' As Long
- Dim i ' As Long
- res = 1
- 'SmPrint "Sqr("&n&")=", Sqr(n), " Int(Sqr("&n&"))=", Int(Sqr(n))
- For i = 2 To Int(Sqr(n)) + 1
- If n Mod i = 0 Then
- 'SmPrint "(i <> n \ i)=", i, "<>", n \ i
- If i <> n \ i Then
- res = res + i + n \ i
- Else
- res = res + i
- End If
- End If
- Next
- 'SmPrint "res=", res
- factor = res
- End Function
- Function 好友数据对(开始数字, 结束数字)
-
- '【作者】:神梦无痕
- '【QQ】:1042207232
- '【Q群】:584781753
-
- Dim n ' As Long
- Dim res ' As Long
- Dim buddy ' As Variant
-
- n = 开始数字
- buddy = "Nothing"
- Do While (n <= 结束数字)
- res = factor(n)
- If res - 1 <= n Or factor(res - 1) - 1 <> n Then
- n = n + 1
- Else
- buddy = Array(n, res - 1)
- Exit Do
- End If
- Loop
- 好友数据对 = buddy
- 'SmPrint buddy
- End Function
- SmAssert.That 好友数据对(10, 50), "=", Array(48, 75)
- SmAssert.That 好友数据对(2177, 4357), "=", "Nothing"
复制代码 插件下载【插件】神梦断言插件 SmAssert.dll,帮助开发者发现业务逻辑错误
|