[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[练习]批处理实现角谷猜想

日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。
  猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。

用批实现验证吗?(附上演算过程)

任意一个奇数 n*3+1后都必将是个偶数。
好像只需求证出这一步就可以了。
心绪平和,眼藏静谧。

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set/p num=Input a numeric:
  3. :loop
  4. set/a mod=num%%2,x+=1
  5. if %mod% equ 1 (
  6.     set "var=!num! * 3 + 1"
  7.     set/a num=num*3+1
  8.     set "var=!var! = !num!"
  9.     ) else (
  10.     set "var=!num! / 2"
  11.     set/a num/=2
  12.     set "var=!var! = !num!"
  13. )
  14. echo    %x%:   !var!
  15. if %num% neq 1 goto loop
  16. pause
复制代码

[ 本帖最后由 pusofalse 于 2008-9-15 19:39 编辑 ]
心绪平和,眼藏静谧。

TOP

原帖由 pusofalse 于 2008-9-14 16:02 发表
@echo off&setlocal enabledelayedexpansion
set/p num=Input a numeric:
:loop
set/a mod=num%%2,x+=1
if %mod% equ 1 (
    set "_%x%=!num! * 3 + 1"
    set/a num=num*3+1
    set "_%x%=!_%x%! = !num ...


版主的不错哦
和我的思路一样...

TOP

  1. @echo off
  2. :eo
  3. cls
  4. set/p n=输入大于1的数字:
  5. echo %n%
  6. :xs
  7. if %n%==1 pause&goto :eo
  8. set/a m=%n%%%2
  9. if %m%==1 (call :xx n %n% "*3+1") else (call :xx n %n% "/2")
  10. goto xs
  11. :xx
  12. set/a %1=%2%~3
  13. echo %2%~3=%n%
复制代码

TOP

没人用&运算?比%快嗬

TOP

回复 6楼 的帖子

高,按位相与。。。
心绪平和,眼藏静谧。

TOP

原帖由 slore 于 2008-9-14 23:43 发表
没人用&运算?比%快嗬


slore讲解下吧...

TOP

我的答案
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :1
  4. set  num=%random%%random%%random%
  5. :a
  6. set num1=%num%
  7. if %num% equ 1 (echo OK!&pause&goto :1)
  8. set /a v=%num%%%2
  9. if %v% equ 0 (set /a num=%num%/2&echo %num1%/2=!num!) else (set /a num=%num%*3+1&echo %
  10. num1%*3+1=!num!)
  11. pause>nul&goto :a
复制代码

TOP

回复 9楼 的帖子

按位相与可以理解为对应位上有0则0,“与”大概就是乘的意思。
set/a n=1000"&"64
(deci) 1000 ----> (bin) 1111101000
(deci) 64     ----> (bin) 0001000000
---------------------------------------
      1111101000
(&) 0001000000
-------------------------
      0001000000

(bin) 0001000000 -----> (deci) 64
所以n的值是64.

[ 本帖最后由 pusofalse 于 2008-9-15 18:42 编辑 ]
心绪平和,眼藏静谧。

TOP

没看懂...
(deci) 1000 ----> (bin) 1111101000
(deci) 64     ----> (bin) 0001000000
这里是什么意思?
转为二进制?

[ 本帖最后由 qq641255849 于 2008-9-15 20:59 编辑 ]

TOP

deci(mal)十进制 bin(ary)二进制
10进制数1000,转为2进制就是1111101000
心绪平和,眼藏静谧。

TOP

回复 6楼 的帖子

哈   不是大家都会滴   比如我就不会……呜呜

TOP

回复 13楼 的帖子

多学习就会了

批处理位运算
http://bbs.bathome.net/thread-1844-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

请教版主

批处理数据达到多大会产生错误?

谢谢!

我用VB做过角谷猜想 设为Decimal 数据类型 最大输入数或中间运算结果都不能大于 79,228,162,514,264,337,593,543,950,335

否则 数据溢出错误

目前,网上公布的 角谷猜想的最大验证数 好像已达到 January 18 2009: 20·2^58 reached.

不知他用的什么机器和方法?

[ 本帖最后由 yzstwz 于 2010-8-3 18:51 编辑 ]

TOP

返回列表