[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
【转帖1】批处理实现素数堆垒及哥德巴赫猜想局部验证
  1. :: Prime.bat - Generate a serial prime number
  2. :: Dirk van Deun - Will Sort Modified 2004/11/18
  3. ::
  4. :: 改进: 将isprime和divided函数并入主函数以及其他一些风格上的改进
  5. :: 效果: 函数,变量和代码均减少, 速度继续提升; 测试运行时间约 1.6秒
  6. @echo off
  7. if [%1]==[$] goto %2
  8. if [%1]==[] %comspec% /e:5000 /c %0 $ init
  9. del ~prime.bat
  10. goto end
  11. :: 初始化: 产生素数2, 将它存为第一个素数, 设置循环起始值
  12. :init
  13. echo I I
  14. set prime-num=I
  15. set %prime-num%=I I
  16. set prime-in=I
  17. :: 对3~n的奇数 %prime-in% 与已产生的所有素数由小到大循环相除
  18. :: 若全部未整除则显示此整数, 否则递增 %prime-in% 后继续循环
  19. :runloop
  20. set prime-in=I I %prime-in%
  21. set divisor-no=I
  22.     :divideloop
  23.     echo set divisor=%%%divisor-no%%%>~prime.bat
  24.     call ~prime.bat
  25.     call %0 $ loopminus %prime-in%
  26.     if "%min-out%"=="" goto runloop
  27.     if "%divisor-no%"=="%prime-num%" goto isprime
  28.     set divisor-no=I%divisor-no%
  29.     goto divideloop
  30. :isprime
  31. echo %prime-in%
  32. set prime-num=I%prime-num%
  33. if "%prime-num%"=="IIIIIIIIII" goto end
  34. set %prime-num%=%prime-in%
  35. goto runloop
  36. :: 对传入的 %dividend%(被除数) %divisor%(除数) 循环相减
  37. :: 若不足相减 (%2!=I) 则返回下溢错, 否则直接返回空
  38. :loopminus
  39. for %%n in (%divisor%) do shift
  40. if not [%3]==[] goto loopminus
  41. set min-out=
  42. if [%2]==[] set min-out=underflow
  43. goto end
  44. :end
复制代码
原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=14580
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

【转帖2】批处理筛选质数
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::::::::::::::::::::::::::::Find Prime Numbers::::::::::::::::::::::::::::
  4. ::::::::::::::::::::::::::::{s11ss  2007-9-20}::::::::::::::::::::::::::::
  5. :r
  6. echo Please input the upper limit number:
  7. set /p n=
  8. if not !n! geq 2 (echo 2 at least. & goto :r)
  9. echo.
  10. echo Calculating...
  11. set /a i=2
  12. for /l %%a in (2,1,!n!) do (
  13.         set m%%a=0
  14. )
  15. :ci
  16. set /a j=!i!
  17. :cj
  18. set /a m=!i!*!j!
  19. if !m! leq !n! (
  20.         set /a j+=1
  21.         set m!m!=1
  22.         goto :cj
  23. ) else (
  24.         set /a i+=1
  25.         set /a ii=!i!*!i!
  26.         if !ii! leq !n! (goto :ci) else (goto :e)
  27. )
  28. :e
  29. set /a counter=0
  30. echo.
  31. echo In [2,!n!],prime numbers are:
  32. for /l %%a in (2,1,!n!) do (
  33.         if !m%%a! equ 0 (
  34.                 echo %%a
  35.                 set /a counter+=1
  36.                 )
  37. )
  38. echo.
  39. echo In total:!counter!
  40. echo.
  41. echo Press Any Key To Exit.
  42. pause>nul
复制代码
原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=33724
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

【转帖3】批处理寻找大素数-32位正整数的素性判定

以下代码完全照搬了以下链接中的判定算法——米勒拉宾检验+二次检验
http://blog.csdn.net/bsrw/archive/2006/11/28/1419145.aspx

遗憾的是其中的二次检测会导致大素数判定时数据溢出
测试结果从46400开始大量出现因为数据溢出而导致的漏检

1000以内测试没有漏检
1000~46400 没有测试
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. :loop_test
  4. set testnum=
  5. set /p testnum=请输入一个整数(按i使用内置测试集,直接按回车退出):
  6. if "%testnum%"=="" goto :eof
  7. if /i not "%testnum%"=="i" (
  8.     call :JudgePrime %testnum%
  9.     if errorlevel 2 (echo 无效输入:%testnum%
  10.     ) else if errorlevel 1 (echo %testnum% 是素数
  11.     ) else (echo %testnum% 是合数)
  12.     goto :loop_test
  13. )
  14. set time0=%time%
  15. for /l %%i in (46001,2,48000) do (
  16.     set /a testnum=%%i
  17.     call :JudgePrime !testnum!
  18.     if !errorlevel! equ 1 set /p=!testnum!  <nul & set /a iprime+=1
  19. )
  20. echo.
  21. echo.
  22. echo found: %iprime%
  23. echo begin: %time0%
  24. echo finish: %time%
  25. pause
  26. goto :eof
  27. :JudgePrime
  28. if [%1]==[] exit /b 2
  29. set /a tmp1=%1
  30. if not %tmp1%==%1 exit /b 2
  31. if %1 lss 2 exit /b 0
  32. if %1 equ 2 exit /b 1
  33. set i=0
  34. for %%i in (2,3,5,7,11) do (
  35.    set prime_!i!=%%i
  36.    set /a prime6p_!i!=%%i*%%i*%%i
  37.    set /a prime6p_!i!*=prime6p_!i!
  38.    set /a i+=1
  39. )
  40. set i=0
  41. :loop1_JP
  42. call set prime_i=%%prime_%i%%%
  43. call set prime6p_i=%%prime6p_%i%%%
  44. if %1 geq %prime6p_3% (
  45.     if !prime_i! equ 3 (
  46.         set /a i+=1
  47.         goto :loop1_JP
  48.     )
  49. ) else (
  50.     if !prime_i! neq 2 if %1 lss !prime6p_i! exit /b 1   
  51. )
  52. call :LikePrime %1 %prime_i%
  53. if not errorlevel 1 exit /b 0
  54. set /a i+=1
  55. if %i% lss 5 goto :loop1_JP
  56. exit /b 1
  57. goto :eof
  58. :LikePrime
  59. set /a x=result=1, tmp1=%1-1, bits=0
  60. :loop1_LP
  61. set /a bits+=1
  62. set /a "tmp1>>=1"
  63. if %tmp1% gtr 0 goto :loop1_LP
  64. set /a tmp1=%1-1
  65. :loop2_LP
  66. set /a bits-=1
  67. set /a result=(x*x) %% %1  %=此句代码判断导致大素数时数据溢出=%
  68. if %result% equ 1 if %x% neq 1 if %x% neq %tmp1% exit /b 0
  69. set /a "tmp2=%tmp1% & (1 << %bits%)"
  70. if %tmp2% neq 0 set /a result=(result*%2) %% %1
  71. set x=%result%
  72. if %bits% gtr 0 goto :loop2_LP
  73. if %result% equ 1 exit /b 1
  74. goto :eof
复制代码
原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=27198
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 22楼 的帖子

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

TOP

返回列表