早教吧作业答案频道 -->数学-->
求下个史密斯数算法史密斯数是指每位数字之和,与所有质因数的每位数字之和相等的数,比如:4937775=3×5×5×65837,4+9+3+7+7+7+5=3+5+5+6+5+8+3+7=42现在如果给定任意一个
题目详情
求下个史密斯数 算法
史密斯数是指每位数字之和,与所有质因数的每位数字之和相等的数,比如:
4937775 = 3 × 5 × 5 × 65837,4 + 9 + 3 + 7 + 7 + 7 + 5 = 3 + 5 + 5 + 6 + 5 + 8 + 3 + 7 = 42
现在如果给定任意一个数字,返回离它最近的史密斯数(0和质数排除在外)
由于是用Haskell写的,所以无法用到C或者Java里的array,我的算法是:
先检测一个数n是否为质数,如果是,则试n+1
然后检测n+1的各位数和 与 n+1的质因数和 是否相等,若相等,返回n+1
否则再测试n+1
检测是否为质数的算法是:
若为2则为质数
若为1或为偶数则返回False
然后从3开始,一个奇数一个奇数试,一直试到这个数的平方根为止
将各位数字相加的算法是:
如果小于10则返回这个数
否则除以10的余数 + sumDigit (n `div` 10)
这个算法算出来的是对的,但是当数字变大时就变得很慢,甚至会发生算不出来的现象,应该怎么改进啊?
史密斯数是指每位数字之和,与所有质因数的每位数字之和相等的数,比如:
4937775 = 3 × 5 × 5 × 65837,4 + 9 + 3 + 7 + 7 + 7 + 5 = 3 + 5 + 5 + 6 + 5 + 8 + 3 + 7 = 42
现在如果给定任意一个数字,返回离它最近的史密斯数(0和质数排除在外)
由于是用Haskell写的,所以无法用到C或者Java里的array,我的算法是:
先检测一个数n是否为质数,如果是,则试n+1
然后检测n+1的各位数和 与 n+1的质因数和 是否相等,若相等,返回n+1
否则再测试n+1
检测是否为质数的算法是:
若为2则为质数
若为1或为偶数则返回False
然后从3开始,一个奇数一个奇数试,一直试到这个数的平方根为止
将各位数字相加的算法是:
如果小于10则返回这个数
否则除以10的余数 + sumDigit (n `div` 10)
这个算法算出来的是对的,但是当数字变大时就变得很慢,甚至会发生算不出来的现象,应该怎么改进啊?
▼优质解答
答案和解析
提前算好需要范围内的史密斯数,列一张表.
然后在运行时只进行简单的查找就可以了.
似乎没有复杂度很低的验证算法.因为分解质因数这个事本身就很难.
然后在运行时只进行简单的查找就可以了.
似乎没有复杂度很低的验证算法.因为分解质因数这个事本身就很难.
看了求下个史密斯数算法史密斯数是指...的网友还看了以下:
现有甲乙两家店出售茶瓶和茶杯,茶瓶每只价格20元茶杯每只5元.现有甲乙两家店出售茶瓶和茶杯,茶瓶每只 2020-03-31 …
24点1,2,3,4算24点!算24点!在1,2,3,4这四个数字和加减乘除,每个数字和符号必须都 2020-05-13 …
3、王大爷卖了香蕉6千克和苹果8千克,共卖了48元,每千克苹果的钱数是每千克香蕉的钱数的2分之1, 2020-05-17 …
明明的爸爸和妈妈每月的收入是8000元,其中妈妈每月的收入是爸爸的3/5,爸爸和妈妈每月收入各是多 2020-07-17 …
如图,A至B是下坡,B至C是平路,C至D是上坡.小张和小王在上坡时步行速度是每小时4千米,平路时步 2020-07-20 …
有哪位知道那个九宫是什么规律,就是每行每竖和每斜行之和都相等.如九个数字,每行每竖和每斜行之和是15 2020-11-02 …
运用加,减,乘,除四种运算和括号,如何由三个5和一个1得到24?(每个数只能用一次)是每个数只用一次 2020-11-20 …
任给一个对称矩阵,怎样才能使该矩阵的每一行、每一列的和都为1?不清楚这个是不是该叫做归一化处理?注意 2020-11-30 …
如图所示,A至B是下坡,B至C是平路,C至D是上坡.小张和小王在上坡时步行速度是每小时4千米,平路时 2020-12-12 …
A,B两人同时从甲地和乙地相向出发,A的速度是每小时25公里,B是每小时20公里,两人在距A,B两人 2021-01-10 …