[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]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
复制代码

弱弱地问一下,这个怎么用?
如无特别说明,代码测试环境均为 XP SP3

TOP

本帖最后由 CrLf 于 2013-7-6 20:31 编辑

回复 18# PowerShell


    python 代码用 print reduce(lambda x,y:x*y,range(1,99999)) 一行搞定怎么破
  1. import datetime
  2. t1 = datetime.datetime.now()
  3. print reduce(lambda x,y:x*y,range(1,99999))
  4. t2 = datetime.datetime.now()
  5. t = t2-t1
  6. print t.microseconds
复制代码
惭愧,4核虚拟8核的中高端配置居然跑了将近一分钟之久,果然比不了 powershell...膜拜
不想扯人品的,我只想说,万般皆下品的宣传策略恐怕最多只能算是负面营销,酒香不怕巷子深,没人会毫无理由地拒绝真正的好东西

TOP

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

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


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

TOP

本帖最后由 PowerShell 于 2013-7-5 21:35 编辑

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

我来围观道“你这鞋能适合多大的脚大小我看不透,你这鞋最大能适合,多少号的脚啊?我也是个做鞋的,我用艹x神兽皮,做过999999999---即9个9号脚穿的鞋 ”

楼主开始顾左右而言它道 “我做出来的鞋是自娱自乐的,我的鞋中原料的占地面积是8192”

我道 做鞋这件事是严谨的 ^_^ ,自娱自乐的鞋也有尺码啊,你不敢说么?

楼主道 “什么不敢说,我这就是8192”

我道 “我问的是多大尺码的脚能穿”

楼主道 “那我没测试过,你真是来买鞋的么?我看你火药味很重啊,你是砸场子来的吧?真正买鞋的都不应该问适合多大脚才对啊!我都说我自娱自乐了”


楼主道“我去过论坛千千万,我转过的鞋市万万千,真没见过你这样素质的人,你不要妄自尊大”


我哭道   “555天理呀!我就问了你做出来的鞋,适合多大号脚,却成了素质差,妄自尊大 ,谁给我块砖,我要一头撞死 ”


-----------------------------------------------
我放出了我做的鞋的3d打印图后,daemon道,原来你用了蚕丝啊,我还以为你用了天衣无缝针法和粗麻布呢.
我道蚕丝质地柔软,凉滑秀美,乃做鞋之上好之料也。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

Demon:
【关于BigInteger类】
BigInteger类是。net中的无限大整数,和python中的整数类似,都是无限大的,真正大小只受当时的存储空间限制。阶乘的结果很大,用此正合用。况且powershell本身是。net的封装。我用BigInteger类有什么不妥么?

【关于算法】
玩脚本的都不太注重算法吧?我认为注重算法的都在玩c之类的。我认为玩脚本的更应该注重库和虚拟机(或者叫脚本解释器)。你注重算法么?


阶乘的话,不是能算更大的数,越好么?----大数阶乘,用powershell算法简单,数又没有啥限制,也就是说代码好写,功能又强,不是更好么?我想这样的语言(如powershell脚本语言,python脚本语言)大家才爱用吧。

我这个脚本最大能算多大的数(n)?我也不道,谁有32g内存的,高主频的服务器,可以试着测测。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

TOP

14楼的孙子从哪冒出来的?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 12# terse


    terse兄何必跟这种不知天高地厚的年轻人一般见识,让他一个人凉快去吧。

TOP

1 这些代码我都看不懂
2 2楼和4楼能算多大的数捏?
3 我写过用powershell + .net4 算 9个9的阶乘的脚本习作 ...
PowerShell 发表于 2013-7-5 10:35



我还以为传教士大人有什么精妙算法呢,原来是靠BigInteger类啊。

TOP

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

TOP

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

TOP

本帖最后由 PowerShell 于 2013-7-5 19:35 编辑

说得够明吗----我觉得你说的不够明白。

n的阶乘应该用n!来表示,你的bat程序n最大能是多少?------n是一个数字,一个正整数。我问的你能听明白么?我要你回答一个确切的数字,即n,你告诉我8192字节干什么?
批处理高效率大数阶乘运算 - 大数是多大的数?n是多少?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

TOP

数学 数值 计算是严谨的,能做多大的不敢说么?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表