查找一个数字是不是可以在一个数字范围内整除

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]

【讨论】:

以上是关于查找一个数字是不是可以在一个数字范围内整除的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用线段树在给定范围内查找数字的频率?

Python在列表或数组中查找范围之间的数字

如何在 SQL 中查找范围内的空白

在 O(1) 空间中的数组中查找重复元素(数字不在任何范围内)

如何检查一个整数是不是在 PHP 中的数字范围内?

查找并计算列表中某个范围内所有出现的数字和位置