Python论坛  - 讨论区

标题:[python-chinese] 已知range, 求prange [大家一起来编程]

2005年12月08日 星期四 10:27

River Yan riverfor at gmail.com
Thu Dec 8 10:27:32 HKT 2005

已知
x = range(10)
x == [0, 1, 2, 4, 5, 6, 7, 8, 9]

x = range(2, 10)
x == [2, 4, 5, 6, 7, 8, 9 ,9]

x = range(2,10,4)
x == [2,  6]

假定1不为质数
且有
x = prange(10)
x == [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

x = prange(2, 10)
x == [5, 7, 11, 13, 17, 19, 23, 29]

x = prange(2, 10, 4)
x == [5, 11, 17, 23, 29]

求 def prange([start,] stop [,step]) => list of  prime numbers


题外话:
做这个有什么用?难道仅仅是好玩?

不,我在做一个报表输出的东西,存在着某一模块内容的显示与不显示问题。

在PHP/Pyton/Perl里用位操作的话能够实现,但是实现起来可能不太方便,并且写出来的代码会很晦涩;使用字符串来做标志的话也可以,但是这种处理将会在一定程度上影响代码的效率;用bool值处理一个模块是否输出的话也可以,但是如果报表模块要增加减少的话,还得花相对多的时间去修改代码......
于是考虑每个模块用一个质数来代替,只需要做一个除法来处理来判断该模块输不输出,即使有新增的模块,所作的代码的改动工作也不会很多(应该可是说得是变相的位操作),这就涉及到了取一个质数范围的操作。

本人已实现PHP版本的笨拙的函数,感觉做这件事情很好玩,所以将此想法出来,感兴趣的朋友不妨思考下?或许会对你们的工作也有帮助。

--
riverfor's showtime.
riverfor's game

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 10:38

limodou limodou at gmail.com
Thu Dec 8 10:38:09 HKT 2005

> 不,我在做一个报表输出的东西,存在着某一模块内容的显示与不显示问题。
>
可以写到配置文件中去呀

> 在PHP/Pyton/Perl里用位操作的话能够实现,但是实现起来可能不太方便,并且写出来的代码会很晦涩;使用字符串来做标志的话也可以,但是这种处理将会在一定程度上影响代码的效率;用bool值处理一个模块是否输出的话也可以,但是如果报表模块要增加减少的话,还得花相对多的时间去修改代码......
> 于是考虑每个模块用一个质数来代替,只需要做一个除法来处理来判断该模块输不输出,即使有新增的模块,所作的代码的改动工作也不会很多(应该可是说得是变相的位操作),这就涉及到了取一个质数范围的操作。
>
> 本人已实现PHP版本的笨拙的函数,感觉做这件事情很好玩,所以将此想法出来,感兴趣的朋友不妨思考下?或许会对你们的工作也有帮助。
>

不是很清楚最后你的模块是如何控制的,你只是说了如何找到哪些模块需要输入,但如何控制却没有提。同时除法怎么就能控制了没看懂。另外模块的增删为什么要改程序呢?如果写到配置文件或有一个统一的导入模块,只修改一个文件就行了。或者可以自动根据配置文件来生成导入模块,这样不就自动了嘛。如果使用稳定了,自动生成过程就可以跳过去,一旦发生改变,则再次自动生成。这样可以通过文件内容的md5或简单通过时间来进行判断。


--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年12月08日 星期四 11:34

amingsc amingsc at gmail.com
Thu Dec 8 11:34:24 HKT 2005

River Yan 写道:

>题外话:
>做这个有什么用?难道仅仅是好玩?
>
>不,我在做一个报表输出的东西,存在着某一模块内容的显示与不显示问题。
>  
>
不错,有新意

>在PHP/Pyton/Perl里用位操作的话能够实现,但是实现起来可能不太方便,并且写出来的代码会很晦涩;
>
你不外乎是想弄个东西来汇总所有的判断标志嘛,用位操着的话我想可以用一个类 
来封装,就可以多次重复使用,写的时候麻烦点但以后是一劳永逸啊,也值得的

>使用字符串来做标志的话也可以,但是这种处理将会在一定程度上影响代码的效率;用bool值处理一个模块是否输出的话也可以,但是如果报表模块要增加减少的话,还得花相对多的时间去修改代码......
>于是考虑每个模块用一个质数来代替,只需要做一个除法来处理来判断该模块输不输出,即使有新增的模块,所作的代码的改动工作也不会很多(应该可是说得是变相的位操作),这就涉及到了取一个质数范围的操作。
>
>  
>
你就是利用了质数因子的唯一性而已,看似简单,我认为有几点问题:
1。有没有产生质数数组的快速算法?
好像见过一个产生大量质数的近似快速算法,但不精确
如果用那个经典的判断所有因子的办法那就不敢想象了^_^

2。当数组很长的时候质数会不会很大,其所有单元的乘积会不会成为天文数字?
不知道你的意思是不是用乘积^_^

我试了一下,产生101个质数的时候,乘积为
257742614754868316937988084561386245084525440105509250954318325727017
918870723371899929322341793294103892418994148410542151699601546741832
617953638436279944072980418788682453341495300190580109062278796954007
6319408964006230
虽然python可以处理这种天文数字,不过效率应该不会很好

3。用字符串做标志的话,效率怎么样?
假设产生100个标志,先看需要多少个字符串?最小平均长度是多少?
1个字符26个
2个字符26*26=676个
3个字符26×26×26=17576个
所以产设100个标志的平均长度为【26+(100-26)*2】/100=1.74
看样子效率也不是很低的哦^_^

>本人已实现PHP版本的笨拙的函数,感觉做这件事情很好玩,所以将此想法出来,感兴趣的朋友不妨思考下?或许会对你们的工作也有帮助。
>
>--
>riverfor's showtime.
>riverfor's game
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>python-chinese
>Post: send python-chinese at lists.python.cn
>Subscribe: send subscribe to python-chinese-request at lists.python.cn
>Unsubscribe: send unsubscribe to  python-chinese-request at lists.python.cn
>Detail Info: http://python.cn/mailman/listinfo/python-chinese
>

-- 
中文人工智能讨论组
http://groups.google.com/group/ai-chinese


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号