Board logo

标题: [练习]批处理实现角谷猜想 [打印本页]

作者: qq641255849    时间: 2008-9-14 15:23     标题: [练习]批处理实现角谷猜想

日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。   猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。 用批实现验证吗?(附上演算过程)
作者: pusofalse    时间: 2008-9-14 15:45

任意一个奇数 n*3+1后都必将是个偶数。
好像只需求证出这一步就可以了。
作者: pusofalse    时间: 2008-9-14 16:02

  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 编辑 ]
作者: qq641255849    时间: 2008-9-14 16:51

原帖由 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 ...


版主的不错哦
和我的思路一样...
作者: wxcute    时间: 2008-9-14 22:17

  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%
复制代码

作者: slore    时间: 2008-9-14 23:43

没人用&运算?比%快嗬
作者: pusofalse    时间: 2008-9-14 23:51     标题: 回复 6楼 的帖子

高,按位相与。。。
作者: qq641255849    时间: 2008-9-15 09:50

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


slore讲解下吧...
作者: qq641255849    时间: 2008-9-15 18:16

我的答案
  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
复制代码

作者: pusofalse    时间: 2008-9-15 18:40     标题: 回复 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 编辑 ]
作者: qq641255849    时间: 2008-9-15 20:56

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

[ 本帖最后由 qq641255849 于 2008-9-15 20:59 编辑 ]
作者: pusofalse    时间: 2008-9-15 20:59

deci(mal)十进制 bin(ary)二进制
10进制数1000,转为2进制就是1111101000
作者: 523066680    时间: 2008-9-20 16:45     标题: 回复 6楼 的帖子

哈   不是大家都会滴   比如我就不会……呜呜
作者: Batcher    时间: 2008-9-20 17:39     标题: 回复 13楼 的帖子

多学习就会了

批处理位运算
http://bbs.bathome.net/thread-1844-1-1.html
作者: yzstwz    时间: 2010-8-3 18:42

请教版主

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

谢谢!

我用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 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2