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

[数值计算] 批处理高效率大数阶乘运算

因朋友叫写个效率能提高点的大数阶乘
发在这里 能有提高效率的 盼指教
如版主认为 重复贴 可删除
  1. @echo off&setlocal enabledelayedexpansion
  2. Set /a "X=1,X_len=6"
  3. set i=000000000000&set X=!i:~,5!!X!
  4. for /l %%i in (2 1 1000) do (
  5.     for /l %%j in (6 6 !X_len!) do (
  6.         if "!x:~-%%j,6!" neq "000000" (
  7.            for /f "tokens=* delims=0" %%k in ("!x:~-%%j,6!") do (
  8.        set /a "i=%%i*%%k+1!i:~-6!+0X3B8B87C0"
  9.            )
  10.         )
  11.        set T=!i:~-6!!T!&set "i=000000!i:~1,-6!"
  12.     )
  13.        for /f "tokens=* delims=0" %%j in ("!i!!t!") do set "x=00000%%j"
  14.        if "!i:0=!" neq "" set /a "X_len+=6"
  15.        set t=&set "i=%i%"
  16. )
  17. echo !X:~5!
  18. pause
复制代码

这样 大数乘法似乎效率可以高点了
论坛上 乘法的运算应该有了
如版主认为 重复贴 可删除
  1. @echo off&setlocal enabledelayedexpansion
  2. set X=33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489
  3. set Y=36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917
  4. for %%i in (X Y) do (
  5. set $%%i=000!%%i!&set S=!$%%i!&set #%%i=1
  6.     for %%j in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1)do if "!S:~%%j!" neq "" set/a #%%i+=%%j&set "S=!S:~%%j!"
  7. )
  8. set j=0000
  9. for /l %%i in (4 4 %#X%) do (
  10.     for /f "tokens=* delims=0" %%a in ("!$x:~-%%i,4!") do (
  11.         if "%%a" neq "" (
  12.            set s=&set i=0000
  13.            for /l %%j in (4 4 %#Y%) do (
  14.                for /f "tokens=* delims=0" %%b in ("!$y:~-%%j,4!") do (
  15.                    if "%%b" neq "" (
  16.                       set /a i=%%a*%%b+1!i:~-4!+1!j:~-%%j,4!+0x5F592E0
  17.                    ) else set/a i=1!i:~-4!+1!j:~-%%j,4!+0x5F592E0
  18.                )
  19.                      set s=!i:~-4!!s!&set i=!i:~,-4!
  20.            )
  21.                      set j=!i!!s!
  22.         )
  23.                      set str=!j:~-4!!str!
  24.                      set j=%j%!j:~1,-4!
  25.     )
  26. )
  27. for /f "tokens=* delims=0" %%i in ("!j!!str!") do echo %%i
  28. pause
复制代码

TOP

把大数除法  大数开方 以及加减 运算效率提上去
权当自娱自乐

TOP

为 学批处理的第一个程序 汗一个

TOP

本帖最后由 terse 于 2013-7-5 12:31 编辑

回复 6# PowerShell
首先bat 做此类肯定有局限的
不过在前面说了权当自娱自乐
BAT支持最大变量字节是8k
bat做此类真的是自娱自乐 玩玩算法而已 故本人后做的 大数开方 和 大数除法 也就不放上来了

另 一楼是 大数阶乘 二楼是大数乘法

TOP

尊敬的PowerShell版主大人   什么叫"能做多大的不敢说么"
清楚的说了 BAT支持最大变量字节是8k
也就是8192字节
你要是运算中无论是运算数还是运算结果 不超过这个限制 至少理论上可以 除非代码有问题
也就是说所有运算中用到的变量长度(包括结果)不超过这个限制就好 说得够明吗

TOP

回复 10# PowerShell
抱歉了 本人到真没测试你说 N 最大到多少
我想来这个论坛是学习的交流 感觉和你交流 寥寥几句  就火药味太浓 不觉得吗
至于你身为版主 我想一定在某方面 做的很好 但做什么都 人先要做好
就此。。。。。

TOP

正如你所说 计算是严谨 但我开始也说了 自娱自乐一下 是你来较真一下?
我也不做学术 你先做你的严谨  我先自娱自乐 不行吗
我之所以告诉你8192字节 BAT有了这个限制 你不理解 或其他的 我不得而知
难道要说大数 就非要说个数吗 至少这里的大数 是突破BAT 本身限制的

TOP

来论坛这么多时间 其他的不说 其他大小论坛 也跑过不少了 还真没有见过你这样素质的人  何况也是版主
看样子你不是来交流的 你是来寻衅的? 或者 或多或少带有挑衅性
人不要妄自菲薄 但更不要妄自尊大!

TOP

楼主在本鞋市,喊道“快来买啊,我做出来的鞋子适合大脚丫”

我来围观道“你这鞋能适合多大的脚大小我看 ...
PowerShell 发表于 2013-7-5 21:03


没做作家真是可惜了
你就叫吧  无聊

TOP

返回列表