找回密码
 欢迎注册
查看: 19375|回复: 16

[擂台] [转载]阶乘和积分解问题

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

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

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

×
http://tieba.baidu.com/f?kz=723550649 n个正整数,可以有相同的,他们和是1到n所有整数的和,积是1到n所有整数的积,问n最大能到多少,使得这n个数只能是1到n所有整数 链接中已经给出: 1*6*7*10=2*3*5*14 1+6+7+10=2+3+5+14 所以余下工作量很小了。 谁写个程序穷举一下? ------------------------ 扩展问题: 求N个正整数(可以存在相等的数),要求和为${N(N+1)}/2$,积为$N!$的解的数目 如N=8,有4个解: [8, 7, 6, 5, 4, 3, 2, 1] [9, 7, 5, 4, 4, 4, 2, 1] [10, 7, 4, 4, 4, 3, 3, 1] [10, 7, 6, 4, 3, 2, 2, 2]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-5 11:15:15 | 显示全部楼层
题目读的很费解。 比如说,LZ所举例子中对应的n是多少?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-5 11:15:28 | 显示全部楼层
呵呵,本来想用C写, 不过先试用了一下Pari/Gp,发现已经很快了。
  1. vf(N)=
  2. {
  3. a=vector(N);
  4. P=N!;
  5. S=(N*(N+1))/2;
  6. s=0;p=P;
  7. search(1,N);
  8. }
  9. search(step, total)=
  10. {
  11. local(v,c);
  12. v=divisors(p);
  13. for(u=1,length(v),
  14. c=v[u];
  15. if(c+s>S,break());
  16. if(step>1&&c>a[step-1],break());
  17. a[step]=c;
  18. s=s+c;
  19. p=p/c;
  20. if(step<total,
  21. search(step+1,total),
  22. if(s==S&&p==1,print(a)));
  23. p=p*c;
  24. s=s-c;
  25. )
  26. }
复制代码
(11:12) gp > vf(7) [7, 6, 5, 4, 3, 2, 1] (11:12) gp > vf(8) [8, 7, 6, 5, 4, 3, 2, 1] [9, 7, 5, 4, 4, 4, 2, 1] [10, 7, 4, 4, 4, 3, 3, 1] [10, 7, 6, 4, 3, 2, 2, 2] 所以N=8的时候分解已经不唯一了。不过N=7只有唯一分解 [8,6,3]~[9,4,4]
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-5 11:29:32 | 显示全部楼层
是不是找两组相同数目的正整数,满足和相等积亦相等? 如果是这样的话,n可以任意大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-5 11:32:57 | 显示全部楼层
其中一组指定是1~N这N个数,要求不存在另外一组
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-5 11:39:19 | 显示全部楼层
我们可以改进一下难度,改为计算对于每个N分别有多少个解。 相当于求N个正整数(可以存在相等的数),要求和为${N*(N+1)}/2$,积为$N!$的解的数目
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-5 11:39:42 | 显示全部楼层
为什么“要求不存在另外一组”?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-5 11:42:57 | 显示全部楼层
1~n本身这一组总是存在的呀。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-3-5 11:45:59 | 显示全部楼层
用Pari/Gp计算出来的参考结果: (11:41) gp > vf(8) %9 = 4 (11:42) gp > vf(9) %10 = 12 (11:42) gp > vf(10) %11 = 30 (11:42) gp > vf(11) %12 = 31 (11:42) gp > vf(12) %13 = 112 不过再计算下去有点难度了
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-3-5 11:55:13 | 显示全部楼层
题目都还没看懂,。,
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-24 11:22 , Processed in 0.036591 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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