查找一个数字是不是可以在一个数字范围内整除
Posted
技术标签:
【中文标题】查找一个数字是不是可以在一个数字范围内整除【英文标题】:Find if a number is divisible in a range of numbers查找一个数字是否可以在一个数字范围内整除 【发布时间】:2021-12-23 06:31:17 【问题描述】:我确实想通过以下方式(C 代码)将整数(rstart)与整数(数字)进行比较:
#include <stdio.h>
#include <stdlib.h>
int main (void)
int rstart = 15, rend = 25, number = 629;
while (rstart <= rend)
rstart++;
if (number % rstart == 0)
return number % rstart;
return number % rstart;
现在我知道如何在 c 或 python 中编写类似的东西,但我不知道如何在 Haskell 中编写。
我确实从以下开始:
dividesRange :: Integer -> Integer -> Integer -> Bool
dividesRange number rstart rend =
我不知道如何在 Haskell 中实现 C 中的 while 循环。我知道我可以使用所有 if 语句,但在我看来这是低效的。有没有一种简单的方法可以在 Haskell 中编写它?
【问题讨论】:
【参考方案1】:dividesRange :: Integer -> Integer -> Integer -> Bool
dividesRange number rstart rend = go rstart where
go x
| x > rend = False
| otherwise = number `rem` x == 0 || go (x+1)
它是如何工作的:
-
我们使用辅助函数
go
。
基本情况是x
(rstart) 大于rend
。在这种情况下,我们返回 False。
否则,我们检查number
除以x
的余数是否为零。如果是这样,我们返回 True 并且不再递归。
否则我们增加x
并再次调用go
。
使用any
我们可以将上面的内容改写如下:
dividesRange2 :: Integer -> Integer -> Integer -> Bool
dividesRange2 number rstart rend = any (\x -> number `rem` x == 0) [rstart..rend]
【讨论】:
以上是关于查找一个数字是不是可以在一个数字范围内整除的主要内容,如果未能解决你的问题,请参考以下文章