分类 学习笔记 下的文章

近期看大宝的作业其中有讲如何快速判断一个大数能否被整除,这里整理一下备查。

定理

a*b除以c的余数等于a除以c的余数*b除以c的余数
a*b mod c = (a mod c) * (b mod c) mod 表示取余。

原理

设:

a = k1*c + x
b = k2*c + y

则:

a*b 
= (k1*c+x)*(k2*c+y)
= k1*k2*c*c + (k1*y+k2*x)*c + x*y
= [k1*k2*c + (k1*y+k2*x)]*c + x*y

明显 [k1*k2*c + (k1*y+k2*x)]*c包含因数c,取余时可直接舍去。
故:

a*b mod c = x*y mod c

2

这个简单直接看末位能否被2整除。

3

所有数位上的数字相加能被3整除。
原理:abc = a*(3*33+1) + b*(3*3+1) +c =3*33*a + 3*3*b + a + b + c
明显3*33*a + 3*3*b能被3整除,故只用考虑 a + b + c能被3整除。

4

最后两位能被4整除。还有简便计算:ab(一个两位数),a*2 + b能被4整除。
原理:abc = a*(4*25) + b*(4*2+2) +c =4*25*a + 4*2*b + 2*b + c
明显4*25*a + 4*2*b能被4整除,故只用考虑 2*b + c能被3整除。

5

末位为05

6

同时被23整除。

7

以三位分节,然后奇减偶,结果能被7整除。还有简便计算abc(一个三位数),a*2 + b*3 + c能被7整除。

原理

1、 10 、 100、1000、10000、100000……除7的余数分别为1、3、2、6、4、5、1、3、2、6、4、5……
1 3 2 6 4 5的循环
同时6 4 5又可以写为-1 -3 -2因此可以改写为1 3 2 -1 -3 -2 1 3 2 -1 -3 -2……
即从个位起以三位分节。余数按1 3 2循环,奇数节为正,偶数节为负。
例:123456789123456
先分节:

大数123456789123456
分节54321

所有奇数节为 1 3 5 对应 456 789 123
所有偶数节为 2 4 对应 123 456
奇减偶:(456 + 789 + 123) - (123 + 456) = 789
再运用简便计算:7*2 + 8*3 + 9 = 47 => 47/7=6 ··· 5123456789123456除以75
注:如各节加和为负则对应余数加7转换为正数

8

末三位能被8整除。简便计算abc(一个三位数),a*4 + b*2 + c 能被8整除。

原理

dabc = d*8*125 + a*(8*12+4) + b*(8+2) +c = d*8*125 + a*8*12 + b*8 + a*4 + b*2 +c
即余数等同于 a*4+b*2+c

进阶推广

任意大数除以2的n次方时,余数只需要考虑末n位
记最后n位为X(1)X(2)……X(n)
则结果为X(1)*2^(n-1) + X(2)*2^(n-2) + …… + X(n)*2^(n-n)

9

所有数位上的数字相加能被9整除。

原理

abc = a*(9*11+1) + b*(9*1+1)+c = a*9*11 + b*9*1 + a + b + c
即余数等同于 a + b + c

之前看到有个开放的项目MKPlayer,觉得蛮有意思就搞了个。
由于经常切换设备,有了同步歌单的需求。
然后发现他的设计思路是直接调取网易的歌单,或者是手工修改歌单,每次添加或删除歌曲比较麻烦。
于是就给他修改了一下。

  1. 添加了“喜欢的歌”歌单
  2. 添加爱心按钮,点击喜欢,就会前歌曲添加到喜欢歌单中,再次点击就移除
  3. 添加歌单同步按钮,可以同步到云端或从云端同步到本地
  4. 添加用户id,以识别不同的用户
  5. 修改API接口为网易云开放接口
  6. 版权因素,音乐播放逻辑与网易保持同步:版权音乐仅提供试听。

来试试吧:music.ab.cd

前段些天发现每过一段时间电脑的时间总会出现一些误差,之前总是使用自带的授时服务器(ntp)进行更新,但是经常遇到更新失败的问题,后来听liangke说他都是使用国家授时中心的ntp服务,由于是国内网络连接比较好,很快就可以同步完成。就决定也使用国内的ntp服务。

那天,想到自己手上一直荒废的域名 t.hm ,似乎还比较合适,就解析了过去。你还别说,效果还不错呢。

后来又做了个显示时间的页面 https://www.t.hm
其中使用了JQuery的AJAX和定时任务两非常实用的功能,就记在这里,说不定还用的上的。

这里主要用了两个插件:dayjs 和 jquery。

哦,还有一个很奇葩的BUG,Safari浏览器不支持解析yyyy-mm-dd格式的时间,所以需要修改时间格式(我这里用的是/代替的-)。

<script>
    // 初始化时间变量
    var localTime;

    getServerTime();
    setInterval(getServerTime, 10 * 60 * 1000); 

    // 每秒更新本地时间显示
    setInterval(updateLocalTime, 1000);

    // 函数:获取服务器时间
    function getServerTime() {
        $.ajax({
            url: 'time.php',
            type: 'GET',
            success: function(response) {
                setLocalTime();
            },
            error: function() {
                // 处理请求失败的情况
            }
        });
    }

    // 设置服务器时间为当前时间
    function setLocalTime() {
        if (serverTime) {
            localTime = new dayjs(serverTime);
        }else{
            console.log('serverTime:'+serverTime);
        }
    }

    // 函数:更新本地时间显示
    function updateLocalTime() {
        if (localTime) {
            tmp = dayjs(localTime).format('YYYY-MM-DD HH:mm:ss ZZ');
            $('#time').text(tmp);
            $("#title").text(tmp+' - t.hm 授时服务');
            localTime = dayjs(localTime).add(1,'s');
        }
        //console.error('localTime:'+localTime);
    }
</script>

本来想要随便放一个小视频的,结果丢上去之后各个浏览器显示结果很不一样,折腾了半天算了稍微顺眼一点点,为了防止以后再遇到,就放这里做个笔记,说不定什么时候又用的上呢。

    <script type="text/javascript">
        var ww = $(window).width();
        var hh = $(window).height();

        var video = $('#myVideo');

        video.on('loadedmetadata', function() {
            var videow = video.prop('videoWidth');
            var videoh = video.prop('videoHeight');
            var nn = videow/videoh;
            var xw = xh = 0;

            if(ww>videow && hh>videoh){
                xw = videow * 0.9;
                xh = videoh * 0.9;
            }else if(ww/hh > nn) {
                xh = hh * 0.6;
                xw = xh * nn;
            }else{
                xw = ww * 0.95;
                xh = xw / nn;
            }
            video.width(xw);
            video.height(xh);
        });
    </script>

人类主要拥有至少七种表情:

  • 高兴:人们高兴时的面部动作包括:嘴角翘起,面颊上抬起皱,眼睑收缩,眼睛尾部会形成“鱼尾纹”。
  • 伤心:面部特征包括眯眼,眉毛收紧,嘴角下拉,下巴抬起或收紧。
  • 害怕:害怕时,嘴巴和眼睛张开,眉毛上扬,鼻孔张大。
  • 愤怒:这时眉毛下垂,前额紧皱,眼睑和嘴唇紧张。
  • 厌恶:厌恶的表情包括嗤鼻,上嘴唇上抬,眉毛下垂,眯眼。
  • 惊讶:惊讶时,下颚下垂,嘴唇和嘴巴放松,眼睛张大,眼睑和眉毛微抬。
  • 轻蔑:轻蔑的著名特征就是嘴角一侧抬起,作讥笑或得意笑状。

常见微表情解析:

  1. 单肩抖动——不自信时候更容易单肩抖动(并不是所有的单肩抖动就是不自信)。
  2. 注视对方眼睛——人在准备好谎言时,更容易注视对方眼睛,已使对方相信或观察对方是否相信。(并不是注视对方眼睛就是撒谎)
  3. 回答时生硬的重复问题——回答时生硬的重复问题很有可能是典型谎言。
  4. 把手放在眉骨之间——当人感到羞愧的时候,很可能出现的动作是把手放在眉骨或者是额骨附近,用来建立一个视觉阻碍。
  5. 揉鼻子——掩饰真相(男人的鼻子里的海绵体在撒谎时容易痒)。
  6. 眼睛向左看是在回忆,向右看是在思考谎话。
  7. 惊讶表情超过一秒就是假惊讶。
  8. 男人右肩微耸一下就是在说假话。
  9. 用手抚额头——表示羞愧。
  10. 瞳孔放大——恐惧,愤怒,性欲。
  11. 话语重复声音上扬——撒谎。
  12. 肢体阻抗向后退一步,表示刚说的话不可信。
  13. 抿嘴经典的模棱两可的动作。
  14. 摸脖子人撒谎的时候会摸脖子,典型的强迫行为 属于机械反应。
  15. 撒谎的时候没有与之相对应的表情,往往没有任何表情。
  16. 手一直摩挲,一种自我安慰的姿态,当你不相信自己的在说什么的时候,使自己安心。
  17. 当真正的凶手看到被害者照片的时候,会表现出恶心、轻蔑甚至是害怕。但绝对不会是吃惊。
  18. 要是有人要将要实施血腥的罪行,就会出现这样的表情:眉毛朝下皱紧,上眼睑扬起,眼袋绷紧。
  19. 亮出中指(fuck的手势),这是象征性的还有特定意识的下意识手势,充满敌意。
  20. 鼻孔外翻,嘴唇紧闭,生气。
  21. 下巴扬起,嘴角下垂,自责。
  22. 眉毛向上,拉紧,恐惧。
  23. 如果先突然大声说话,然后再用手猛拍桌子,这是对可怕事情反应的手势时间差。如果是真的发火,这两个动作会同时进行。
  24. 提高右边的眉毛,表示你很疑问。
  25. 受右脑控制的左半边脸更容易暴露内心的真实情感(左撇子相反)。

◆撒谎的微表情心理学分析

  • 向对方询问某事时,对方一侧肩抖动表示对方对自己的话不自信。身体和语言不一致,表示他在撒谎。惊奇、害怕的表情在脸上超过一秒,表示是假装的对方对你的质问表示不屑,通常你的质问会是真的。
  • 对方对你撒谎时,会有更多的眼神交流,来判断你是否相信他的谎言。对你的问题生硬的重复是典型的撒谎方式。
  • 说话或思考时把手放在鼻子上是想要掩饰什么的举动。说话时一直把手放在裤兜里或抵着大腿,是紧张的表现。描述一连串发生的事情,如果事情是编造的,他可以按虚构好的顺序说,但是却无法倒叙重复。
  • 人撒谎时会摸脖子,这是经典的机械反应。

◆紧张、愤怒、兴奋的微表情心理学分析

  • 紧张,愤怒,兴奋三种情绪会使人的瞳孔放大手臂紧贴腿部,手指竖起,是心里不安的表现。
  • 微笑的时候眨眼睛说明真的想到令人幸福的事。
  • 假笑眼角是没有皱纹的。
  • 人在害怕时会出现生理逃跑反应:血液从四肢回流回腿部,做好逃跑准备,手部会先变冰凉。微表情是内心流露与掩饰,通常发生在五分之一秒的时间之内。你说错了,对方会有嘴角轻微上扬而又恢复。撒谎时,摇头否认之前可能会有一瞬间的点头动作。

◆忧伤的微表情心理学分析

  • 眉毛挂下来。羞愧的表情:低着头,手抚摸额头,擦汗状。不屑的表情:上嘴唇上扬说话很急,使用手臂或者物体将自己与对方之间形成障碍,是焦虑的表现。当然,每个人遇到被人疑为罪犯时都会有这样的反应。

◆其它的微表情心理学分析

  • 瘪嘴角是经典的犯错表情。对自己的话没信心。
  • 声音的震颤可能是反感或厌恶。
  • 没有表情与出现表情同样重要当一个人面部两侧表情不对称时,他很有可能在伪装感情。
  • 抚摸自己的手是一种自我安慰的手势,在自己不完全相信自己所说的话时,用来尽量打消自己的疑虑。
  • 如果是真的生气,大吼大叫和手用力拍桌子应该是同时发生的,如果一先一后,就有可能是在伪装。
  • 研究表明,越受欢迎的人,越会撒谎,他们善于隐藏自己的情感因此容易受欢迎。
  • 真正的凶手会对被害人表现出轻视、厌恶,甚至害怕,而不是惊讶。