用python研究鬼谷算(韩信点兵)

这篇博客探讨了鬼谷算的原理,通过Python代码验证了哪些数字不被鬼谷算涵盖,发现鬼谷算在某些情况下并不准确,但韩信点兵问题可能是个巧合。

以前便对鬼谷算感兴趣,不过对其原理不懂,后来在网上找到了原理。
在网上找到原理:用3除所得的余数乘上70,加上用5除所得余数乘以21,再加上用7除所得的余数乘上15,结减去105来源网络
图片来自网络
我随手一试,用了52去验算,成功了:单用991,结果却失败了。
于是便 试着去验证一下,有哪些数是不被鬼谷算包括的,代码如下:

for i in range (1001):
    y=70*(i%3)+21*(i%5)+15*(i%7)
    if (y>105): 
        y=y-105
        if (y!=i):
            print(i)

输出结果如下:
2 ,4 ,5 ,8 ,11 ,13 ,14 ,17 ,19 ,20 ,23 ,26 ,29 ,32 ,34 ,38 ,41 ,44 ,47 ,53 ,59 ,62 ,68 ,74 ,83 ,89 ,104 ,106 ,108 ,111 ,112 ,114 ,115 ,117 ,121 ,123 ,127 ,129 ,130 ,132 ,133 ,136 ,138 ,140 ,142 ,144 ,145 ,148 ,151 ,153 ,154 ,155 ,157 ,159 ,160 ,161 ,163 ,166 ,169 ,170 ,172 ,174 ,176 ,178 ,181 ,182 ,184 ,185 ,187 ,191 ,193 ,197 ,199 ,200 ,202 ,203 ,206 ,208 ,211 ,212 ,213 ,214 ,215 ,216 ,217 ,218 ,219 ,220 ,221 ,222 ,223 ,224 ,226 ,227 ,228 ,229 ,230 ,232 ,233 ,234 ,235 ,236 ,237 ,238 ,239 ,241 ,242 ,243 ,244 ,245 ,247 ,248 ,249 ,250 ,251 ,253 ,254 ,256 ,257 ,258 ,259 ,260 ,262 ,263 ,264 ,265 ,266 ,268 ,269 ,271 ,272 ,274 ,275 ,277 ,278 ,279 ,281 ,283 ,284 ,286 ,287 ,289 ,290 ,292 ,293 ,296 ,298 ,299 ,302 ,304 ,305 ,307 ,308 ,311 ,313 ,314 ,316 ,317 ,318 ,319 ,320 ,321 ,322 ,323 ,324 ,325 ,326 ,327 ,328 ,329 ,331 ,332 ,333 ,334 ,335 ,337 ,338 ,339 ,340 ,341 ,342 ,343 ,344 ,346 ,347 ,348 ,349 ,350 ,352 ,353 ,354 ,355 ,356 ,358 ,359 ,361 ,362 ,363 ,364 ,365 ,367 ,368 ,369 ,370 ,371 ,373 ,374 ,376 ,377 ,379 ,380 ,382 ,383 ,384 ,386 ,388 ,389 ,391 ,392 ,394 ,395 ,397 ,398 ,401 ,403 ,404 ,407 ,409 ,410 ,412 ,413 ,416 ,418 ,419 ,421 ,422 ,423 ,424 ,425 ,426 ,427 ,428 ,429 ,430 ,431 ,432 ,433 ,434 ,436 ,437 ,438 ,439 ,440 ,442 ,443 ,444 ,445 ,446 ,447 ,448 ,449 ,451 ,452 ,453 ,454 ,455 ,457 ,458 ,459 ,460 ,461 ,463 ,464 ,466 ,467 ,468 ,469 ,470 ,472 ,473 ,474 ,475 ,476 ,478 ,479 ,481 ,482 ,484 ,485 ,487 ,488 ,489 ,491 ,493 ,494 ,496 ,497 ,499 ,500 ,502 ,503 ,506 ,508 ,509 ,512 ,514 ,515 ,517 ,518 ,521 ,523 ,524 ,526 ,527 ,528 ,529 ,530 ,531 ,532 ,533 ,534 ,535 ,536 ,537 ,538 ,539 ,541 ,542 ,543 ,544 ,545 ,547 ,548 ,549 ,550 ,551 ,552 ,553 ,554 ,556 ,557 ,558 ,559 ,560 ,562 ,563 ,564 ,565 ,566 ,568 ,569 ,571 ,572 ,573 ,574 ,575 ,577 ,578 ,579 ,580 ,581 ,583 ,584 ,586 ,587 ,589 ,590 ,592 ,593 ,594 ,596 ,598 ,599 ,601 ,602 ,604 ,605 ,607 ,608 ,611 ,613 ,614 ,617 ,619 ,620 ,622 ,623 ,626 ,628 ,629 ,631 ,632 ,633 ,634 ,635 ,636 ,637 ,638 ,639 ,640 ,641 ,642 ,643 ,644 ,646 ,647 ,648 ,649 ,650 ,652 ,653 ,654 ,655 ,656 ,657 ,658 ,659 ,661 ,662 ,663 ,664 ,665 ,667 ,668 ,669 ,670 ,671 ,673 ,674 ,676 ,677 ,678 ,679 ,680 ,682 ,683 ,684 ,685 ,686 ,688 ,689 ,691 ,692 ,694 ,695 ,697 ,698 ,699 ,701 ,703 ,704 ,706 ,707 ,709 ,710 ,712 ,713 ,716 ,718 ,719 ,722 ,724 ,725 ,727 ,728 ,731 ,733 ,734 ,736 ,737 ,738 ,739 ,740 ,741 ,742 ,743 ,744 ,745 ,746 ,747 ,748 ,749 ,751 ,752 ,753 ,754 ,755 ,757 ,758 ,759 ,760 ,761 ,762 ,763 ,764 ,766 ,767 ,768 ,769 ,770 ,772 ,773 ,774 ,775 ,776 ,778 ,779 ,781 ,782 ,783 ,784 ,785 ,787 ,788 ,789 ,790 ,791 ,793 ,794 ,796 ,797 ,799 ,800 ,802 ,803 ,804 ,806 ,808 ,809 ,811 ,812 ,814 ,815 ,817 ,818 ,821 ,823 ,824 ,827 ,829 ,830 ,832 ,833 ,836 ,838 ,839 ,841 ,842 ,843 ,844 ,845 ,846 ,847 ,848 ,849 ,850 ,851 ,852 ,853 ,854 ,856 ,857 ,858 ,859 ,860 ,862 ,863 ,864 ,865 ,866 ,867 ,868 ,869 ,871 ,872 ,873 ,874 ,875 ,877 ,878 ,879 ,880 ,881 ,883 ,884 ,886 ,887 ,888 ,889 ,890 ,892 ,893 ,894 ,895 ,896 ,898 ,899 ,901 ,902 ,904 ,905 ,907 ,908 ,909 ,911 ,913 ,914 ,916 ,917 ,919 ,920 ,922 ,923 ,926 ,928 ,929 ,932 ,934 ,935 ,937 ,938 ,941 ,943 ,944 ,946 ,947 ,948 ,949 ,950 ,951 ,952 ,953 ,954 ,955 ,956 ,957 ,958 ,959 ,961 ,962 ,963 ,964 ,965 ,967 ,968 ,969 ,970 ,971 ,972 ,973 ,974 ,976 ,977 ,978 ,979 ,980 ,982 ,983 ,984 ,985 ,986 ,988 ,989 ,991 ,992 ,993 ,994 ,995 ,997 ,998 ,999 ,1000

所以鬼谷算没有什么实际用途,能算对也是个凑巧

for i in range (1001):
    y=70*(i%3)+21*(i%5)+15*(i%7)
    if (y>105):    #可以去掉这步,看下什么数是例外
        y=y-105
        if (y==i):
            print(i," ",end='')

输出结果:
1 3 6 7 9 10 12 16 18 22 24 25 27 28 31 33 35 37 39 40 43 46 48 49 50 52 54 55 56 58 61 64 65 67 69 71 73 76 77 79 80 82 86 88 92 94 95 97 98 101 103 107 109 110 113 116 118 119 122 124 125 128 131 134 137 139 143 146 149 152 158 164 167 173 179 188 194 209

可见韩信运气不错,可能买挂了。

如果你想自己试试,可以如此:

x,y,z=eval(input('该数除以3所得的数为:')),eval(input('该数除以5所得的数为:')),eval(input('该数除以7所得的数为:'))
print('得到:',70*x+21*y+15*z)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值