medie2005 发表于 2009-2-25 20:48:54

数字乘积

对素数n, 计算其十进制表示的各位数字的乘积s, 若s不小于10,则对s重复上面的步骤,直至结果为一位数.
我们记p(n)为经过的步骤数.
比如,31->3, 则p(31)=1. 47->28->16->6, 则p(47)=3.
现在求使p(n)依次为1,2,...,12的最小素数n.

gxqcn 发表于 2009-2-25 21:08:14

发现有个数字经常捣乱,有它立即变为1位数!
这个数字就是——0:M:

可不可以在做数字乘法时滤过它?:Q: :lol

无心人 发表于 2009-2-25 21:21:17

逆向推

先考虑二位的
再考虑三位的
直到...

无心人 发表于 2009-2-25 21:25:54

P(11) = 1
P(29) = 2
P(47) = 3
P(277) = 4
P(769) = 5
P(8867) = 6
P(186889) = 7
P(2678789) = 8
P(26899889) = 9
P(3777888899) = 10

gxqcn 发表于 2009-2-25 21:29:18

回复 3# 无心人 的帖子

虽然乘法具有交换率,
但不得不注意两个数字:
第一个是不出现0,有它则迅速从高层跌入底层(节能电梯:lol );
第二个是反推得注意可添加任意多个1。

由于楼主要求的是最小的素数,所以反推法可能会略过目标值。

无心人 发表于 2009-2-25 21:34:45

全整数反推
从里面找素数

mathe 发表于 2009-2-26 08:26:08

你怎么不继续用haskell来练习了?

无心人 发表于 2009-2-26 09:28:27

忙啊

下周来检查的
好多事情都放下了

下下周老师还考试
还要准备做枪手去
自己也考
而且听说很麻烦的考试

无心人 发表于 2009-2-26 09:58:59

Haskell
:m + List Char

Prelude List Char> let prodd n = product \$ map (\x -> (ord x) - (ord '0')) \$ filter (/='0') \$ sort \$ show (n)
Prelude List Char> prodd 12
2
Prelude List Char> prodd 123
6
Prelude List Char> prodd 1023
6

无心人 发表于 2009-2-26 10:03:15

Prelude List Char> let prodLevel 1 = 1; prodLevel 2 = 1; prodLevel 3 = 1;prodLev
el 4 = 1; prodLevel 5 = 1; prodLevel 6 = 1;prodLevel 7 = 1;prodLevel 8 = 1;prodL
evel 9 = 1;prodLevel n = 1 + (prodLevel (prodd n));
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 数字乘积