mathe 发表于 2008-10-20 22:23:21

阶乘和开方

对于一个不小于3的整数,我们可以通过两种不同操作得到另外的整数:
i)阶乘。
ii)开方并取整。
如果对3反复使用上面的操作符,我们可以得到所有的整数吗?
试计算100中有多少整数可以被表达出来(要求列出对应的操作符序列)

无心人 发表于 2008-10-21 08:17:31

设F代表阶乘,S代表开方(平方么?) 连续n个F记做Fn,同样有Sn ()n表示括号内重复n次
1 S
2 FS
3 F2S2FS2
4 F2S2F... ???
5 F2s2
6 F

10 F2S2FS

26 F2S

43 F2S2FSFS3
44 F2S2FSFS3FS5

46 F2SFS4

50 F2S2FSFS3(FS5)2

103 F2S2FSFS3(FS5)3



PS: PARI/GP是个好东西啊

mathe 发表于 2008-10-21 09:44:55

我也用PARI/GP来计算一些:
%3:s(3)=1 .
%4:f(3)=6 .
%5:s(f(3))=2 .
%6:f(%4)=720
%7:s(%6)=26 .
%8:s(%7)=5 .
%9:f(%8)=120
%10:s(%9)=10 .
%11:s(%10)=3 .
%15:s4(f(%7))=46 .
%17:s2(f(%10))=43 .
%20:s5(f(%17))=44 .
%21:s5(f(%20))=50 .
%22:s(%21)=7 .
%23:s(f(%22))=70 .
%24:s(%23)=8 .
%26:s2(f(%24))=14 .
%27:s3(f(%27))=23 .
%28:s(%27)=4 .
%29:f(%28)=24 .
%31:s4(f(%27))=25 .
%32:s4(f(%29))=30 .
%33:s4(f(%31))=37 .
%34:s4(f(%32))=106 .
%35:s5(f(%33))=22 .
%36:s4(f(%35))=20 .
%38:s3(f(%36))=198
%40:s5(f(%15))=63
%46:s5(f(%21))=103
%52:s6(f(%21))=36 .
%53:s5(f(%52))=19 .
%54:s4(f(%53))=11 .
%55:s2(f(%54))=79 .
%57:s6(f(%21))=67
%63:s7(f(%34))=21
%64:s4(f(%63))=17 .
%66:s3f(%64))=65
%70:s7(f(%9))=35 .
%72:s4(f(%70))=316
%75:s9(f(%72))=18 .
%79:s3(f(%75))=94 .
%80:s(%79)=9
%84:s7(f(%79))=13 .
%86:s3(f(%84))=16
不过我觉得还是用C/C++写代码(利用Stiring公式)比较合适:lol

无心人 发表于 2008-10-21 10:26:36

%27:s3(f(%27))=23 .
不对啊

mathe 发表于 2008-10-21 11:18:45

应该是
%27:s3(f(%26))=23.
抄错了

lqzh1872 发表于 2008-10-23 10:31:00

我个人比较愚笨,不知道是对3的任意次运算,还是对3运算的结果的任意次运算

mathe 发表于 2008-10-23 10:38:41

没有区别

无心人 发表于 2008-10-23 10:42:36

不过
mathe的这个问题有点难
穷举后的树会产生大量的不可计算节点和重复节点

不过,对不可计算节点可以设定个界限,大于多少的值不计算阶乘
而且可以预先存储一部分结果
页: [1]
查看完整版本: 阶乘和开方