数学基础课之余数

前沿

最近在看程序员的数学基础课相关的知识,对于我看到的每个专栏,我都想总结一下。这次谈论的是余数。当我看完过后我才知道余数原来在我们的应用中起了很大的作用,不论是在我们的生活中还是工作中。

1.余数的特征

整数是没有边界的,它可能是正无穷,也可能是负无穷。余数却总是在一个固定的范围中。在生活中,余数可以用来算星期,web编程中可以用在分页中。

余数总是在一个固定的范围内。比如你拿任何一个整数除以7,那得到的余数肯定是在0~6之前的某一个数。所以当我们知道今天是星期一,那我们就可以计算50天之后是星期几,50万天后是星期几。

2.同余定理

两个整数a和b,如果它们除以正整数m得到的余数相等,我们就可以说,a和b对于模m同余。同余定理其实就是用来均分的。

怎么来理解这句话呢?你知道,我们有无穷多个整数,那么怎么能够全面,多维度地管理这些整数呢?同余定理就提供了一个思路。因为不管你的模是几,最终的得到的余数肯定在一个范围内。比如上面我们除以7,就得到星期几;我们除以2,就得到了奇偶数。所以按照这种方式我们就可以把无穷多个整数分成有限多个类。

3.求余过程就是个哈希函数

每个编程语言都有对应的哈希函数。哈希有的时候也会被翻译威散列,简单来说就是将任意长度的输入,通过哈希算法压缩为某一固定长度的输出。

举个例子,假如你想快速读写100万条数据记录,要达到高速地存取,最理想的情况当然是开辟一个连续的空间存放这些数据,这样就可以减少寻址的时间,但是由于条件的限制,我们并没有能够容纳100万条记录的连续地址空间,这个时候怎么办呢?
我们可以考察一下,看看系统是否可以提供若干个较小的连续空间,而每个空间又能存放一定数量的记录。比如我们找到100较小的连续空间,也就是说,这些空间彼此之间是被分隔开来的,但是内部是连续的,并足以容纳1万条记录连续存放,,那么我们就可以使用余数和同余定理来设计一个散列函数,并实现hash表的结构。
下面是我想到的一种方法:

f(x) = x mod size

在这个公式中,x表示等待被转化的数值,而size表示有限存储空间的大小,mod表示取余操作。通过余数,就能将任何数值,转换为有限范围内的一个数值,然后根据这个新的数值,来确定将数据存放在何处

应用

这是我最近看到的一道面试题。用JavaScript写一个函数,输入int型,返回整数逆序后的字符串。如:输入整型1234,返回字符串“4321”。要求必须使用递归函数调用,不能用全局变量,输入函数必须只有一个参数传入,必须返回字符串。

解法一:
      function fun(num) {
        debugger;
        let num1 = num / 10;
        let num2 = num % 10;

        if(num1 < 1) {
          return num;
        } else {
          num1 = Math.floor(num1);
          return `${num2}${fun(num1)}`
        }
      }

      var a = fun(12345); //54321
      console.log(typeof a); //string

这这个解法中就用到了求余操作,当然还用的了递归,后面我会接着介绍~

此处评论已关闭