数字乘积
对素数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. 发现有个数字经常捣乱,有它立即变为1位数!
这个数字就是——0:M:
可不可以在做数字乘法时滤过它?:Q: :lol 逆向推
先考虑二位的
再考虑三位的
直到... 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
回复 3# 无心人 的帖子
虽然乘法具有交换率,但不得不注意两个数字:
第一个是不出现0,有它则迅速从高层跌入底层(节能电梯:lol );
第二个是反推得注意可添加任意多个1。
由于楼主要求的是最小的素数,所以反推法可能会略过目标值。 全整数反推
从里面找素数 你怎么不继续用haskell来练习了? 忙啊
下周来检查的
好多事情都放下了
下下周老师还考试
还要准备做枪手去
自己也考
而且听说很麻烦的考试 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 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));