cpper编程论坛
>
算法
把整数分解为质数和
用户名
记住信息
密码
注册账号
论坛帮助
会员列表
日历事件
搜索
今日新帖
标记版面已读
LinkBack
主题工具
显示模式
#
1
(
permalink
)
2008-05-14
polyrandom
超级版主
注册日期: 2002-09-03
帖子: 3,135
文章:
20
把整数分解为质数和
给定任意大于等于8的整数I,求指数数列x1, x2, ..., xn,使得x1 + x2 + ... + xn等于I,并且x1, x2, ..., xn两两不同。并且,如果有多个这样的数列满足这一条件,那么,要求出这些数列中n最大的那个。
其实算法不难的,问题是我想出的算法复杂度太高了,有没有低一点的?
#
2
(
permalink
)
2008-05-16
liuxinyu
高级会员
注册日期: 2006-02-09
帖子: 303
文章:
48
回复: 把整数分解为质数和
为什么是n最大,而不是最小呢?
#
3
(
permalink
)
2008-05-20
Elminster
超级版主
注册日期: 2002-09-09
帖子: 1,763
回复: 把整数分解为质数和
引用:
作者:
polyrandom
给定任意大于等于8的整数I,求指数数列x1, x2, ..., xn,使得x1 + x2 + ... + xn等于I,并且x1, x2, ..., xn两两不同。并且,如果有多个这样的数列满足这一条件,那么,要求出这些数列中n最大的那个。
其实算法不难的,问题是我想出的算法复杂度太高了,有没有低一点的?
复杂度太高是多高?这个问题可以看作整数背包问题的一个变种,有 O(I*k) 的算法,这里 k 是所有小于 I 的整数的素数个数。你要更低的话,怕是难了。
#
4
(
permalink
)
2008-05-20
polyrandom
超级版主
注册日期: 2002-09-03
帖子: 3,135
文章:
20
回复: 把整数分解为质数和
我没想出O(I*K)的算法,我想出的就是最简单的brute force,所以连复杂度都懒得去算了。
#
5
(
permalink
)
2008-05-21
Elminster
超级版主
注册日期: 2002-09-09
帖子: 1,763
回复: 把整数分解为质数和
引用:
作者:
polyrandom
我没想出O(I*K)的算法,我想出的就是最简单的brute force,所以连复杂度都懒得去算了。
brute force 也就 O(2^k * k) 的复杂度,考虑到 I 和 k 的关系,其实快的有限。这个算法的基本思路是:
1. 记
是能够所有能够被分解为前 m 个质数中某些数之和且小于 I 的数构成的集合。
2. 则
,这里
是第 m+1 个质数,
是
中每个元素加上
后得到的集合。
3. 从
开始算到
,最后检查一遍就好了。
这个过程中任意一个
,大小不超过 I ,很容易做到计算每个
的时候复杂度是 O(I) ,一共计算 k 个,所以复杂度是 O(I*k)。
#
6
(
permalink
)
2008-05-22
bankrock
高级会员
注册日期: 2003-12-11
帖子: 843
文章:
7
回复: 把整数分解为质数和
看标题还以为是歌德巴赫猜想
,原来质数已知。
这个n最大是什么意思?x1,x2,..,xn是按大小排列的吗?如果是的话Dynamic Progamming 应该可以搞定。
#
7
(
permalink
)
2008-05-30
polyrandom
超级版主
注册日期: 2002-09-03
帖子: 3,135
文章:
20
回复: 把整数分解为质数和
找到一个极快的方法,假设X(n) = n的质数分解。
1.计算质数序列P(i)
2.计算和序列S(i) = P(1) + P(2) + ... + P(n)
3.在S(i)里面找到大于等于整数n的最小数,记为S(k)
4.用DP/整数背包/...求S(k) - n的质数分解。
5.如果存在,或者S(k) - n == 0,那么结果就是 { P(1), P(2), ..., P(k) } - X(n)
6.如果不存在,k += 1, go to 4
另外,第4步可以递归地调用这个方法来求出S(k) - n的分解。这个算法不是很完善,不过意思应该到了。
btw:我是在看另一断程序的时候受到的启发,虽然那段程序不完全是这样做的。
书签
Digg
del.icio.us
StumbleUpon
Google
百度搜藏
QQ 书签
雅虎收藏
«
递归版的排列算法
|
一道面试题
»
主题工具
显示可打印版本
邮寄本页给好友
显示模式
平板模式
切换到混合模式
切换到树形模式
发帖规则
您
不可以
发表新主题
您
不可以
发表回复
您
不可以
上传附件
您
不可以
编辑自己的帖子
启用
BB 代码
论坛
启用
表情符号
论坛
启用
[IMG] 代码
论坛
禁用
HTML 代码
Trackbacks
are
启用
Pingbacks
are
启用
Refbacks
are
启用
所有时间均为
格林尼治时间 +9
。现在的时间是
09:10 AM
。
-- 简体中文
-- 繁體中文
联系我们
-
http://www.cpper.com
-
返回顶端
Powered by vBulletin® 版本 3.7.0
版权所有 ©2000 - 2008,Jelsoft Enterprises Ltd.
(C) Copy Right All Right Reserved 2001 - 2007
LinkBack
LinkBack URL
About LinkBacks
Bookmark & Share
Digg this Thread!
Add Thread to del.icio.us
Bookmark in Technorati
Furl this Thread!
Search Engine Friendly URLs by
vBSEO
3.1.0