找回密码
 欢迎注册
查看: 26897|回复: 25

[原创] 关于a^n的计算

[复制链接]
发表于 2010-5-23 23:00:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
1.  计算a^n至少需要几步乘法(显然>=$log_2 n$)
2.  使用该最少的步数共有多少种不同的计算方法?
比如:
计算a^14最少需要6步,共14种计算方法:

1        2        3        4        7        14
1        2        3        5        7        14
1        2        3        6        7        14
1        2        3        6        8        14
1        2        3        6        12        14
1        2        4        5        7        14
1        2        4        5        9        14
1        2        4        5        10        14
1        2        4        6        7        14
1        2        4        6        8        14
1        2        4        6        10        14
1        2        4        6        12        14
1        2        4        8        10        14
1        2        4        8        12        14

3. a^n计算时,最少步数正好有 n种的除了1和14还有哪些?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 00:54:57 | 显示全部楼层
一般地,一数列1=a0, a1, a2,... ar=e,如果对每个i=1,2,...r,存在一整数对(j,k),j<=k<i,使得ai=aj+ak成立,则称为e的长为r的加法链。
寻找最短加法链的问题,目前还不知道有没有多项式时间的算法。它是属于复杂类NP中的问题,即通过“猜测”能用非确定性方法在多项式时间内解决的问题,P类问题则是能确定性地在多项式时间内解决的问题。容易明白P类问题是NP类问题的子集,因为所有多项式时间确定性的问题都可以非确定性地解出。
最短加法链的确定是一个NP完全问题,它是一个至少与解NP集合中所有其他问题同样困难的一个问题。因此,NP完全问题有特别的重要性,因为如果发现它们中间一个的确定性多项式时间的算法,则其他的NP问题也可以在多项式时间内解出。在这种情况下P类与NP类恰好重合。目前,普遍认为P!=NP。

《密码编码学---加密方法的C与C++实现 第2版》P69
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-24 08:22:08 | 显示全部楼层
谢谢回复。

更正一下,1楼的a^14 应该是5步:
1        2        3        4        7        14

a*a=a^2
a*a^2=a^3
a^2*a^2=a^4
a^3*a^4=a^7
a^7*a^7=a^14
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 08:30:58 | 显示全部楼层
乘法链的长度似乎有公式可以估算上界
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-5-24 08:31:38 | 显示全部楼层
计算a^n至少需要几步乘法(显然>=log2n)
-------------------------------------------------
已经推导出:
p(1)=0
p(2)=1
p(3)=2
p(2^n)=n
p(2n)=p(n)+1
p(2n+1)=min(p(n)+2, p(n+1)+2)

评分

参与人数 1威望 +4 鲜花 +4 收起 理由
wayne + 4 + 4 你已经给出答案了

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 13:15:00 | 显示全部楼层
按楼上的思路,编了一个Mathematica程序:

  1. g = If[# > 3, If[EvenQ[#], #0[#/2] + 1, Min[#0[(# - 1)/2], #0[(# + 1)/2]] + 2], # - 1] &;
  2. Table[{ii,g@ii}, {ii, 1, 100}]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 13:36:30 | 显示全部楼层
5# northwolves
p(2n+1)=min(p(n)+2, p(n+1)+2)


感觉这个好像有问题
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 13:44:33 | 显示全部楼层
比如:计算 a^27,按5楼的理论,应该先算出13或14,而a^13,a^14都至少需要5步,所以,
27应该要7步,可是这个只需要6步即可完成:
2,3,6,12,24,27
2,4,8,9,18,27
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 14:14:45 | 显示全部楼层
另外,算31,63,127,255,......似乎也有问题。

a^16需要四步,按5楼的理论,那么a^31应该要6步,可六步的方案我笔画了很长时间,也没找到。
7步的如下:
2,3,6,12,24,30,31
2,3,6,12,18,30,31
2,4,5,10,20,30,31
2,4,5,10,15,30,31
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-5-24 16:37:48 | 显示全部楼层
Knuth写了一个程序计算的:
http://www-cs-faculty.stanford.edu/~knuth/programs.html

评分

参与人数 1贡献 +2 收起 理由
northwolves + 2 很有帮助,看看先

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-5-19 07:56 , Processed in 0.048843 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表