20240630
存在一类神奇的数字,它们经过若干次迭代后会变为1。超能侠很喜欢这类数字,称他们为“幸运数”。将一个数的各位数字平方后求和称为一次迭代,比如19,它迭代得到82、68、100、1,因此是一个幸运数。
有一些数字就不那么幸运,比如29,它迭代得到85、89、145、42、20、4、16、37、58、89 …… 可见 89 到 58 形成了死循环,它永远无法变为1。
显然,一个幸运数迭代过程中经过的数字也是幸运数,比如19、82、68、100都是幸运数。然而,超能侠发现有一类特殊的幸运数,在一定区间内它们不会被其他数字所经过,显得更加幸运,19在区间[1, 100]范围内就是这样的数。如果它还是个素数的话,它的幸运度还将进一步增强。
对于一个特殊的幸运数,幸运度的计算方式如下:设这个数变为1的过程中经过的数字个数为x,则该数的幸运度为x。如果这个数为素数,那么它的幸运度翻倍。例如19变为1的过程中经过了4个数字(82、68、100、1),且它为素数,故19的幸运度为8.
现在,你的任务是编写一个程序,探索给定区间内的特殊的幸运数,并计算它们的幸运度。
输入文件第一行两个整数 A,B,表示区间的左右端点。
输出文件有若干行,按递增顺序输出给定闭区间 [A,B] 内的所有特殊的幸运数和它的幸运度。每对数字占一行,数字间以 1 个空格分隔。如果给定区间内没有特殊的幸运数,输出SAD。
输入
10 40
输出
19 8 23 6 28 3 31 4 32 3
输入
110 120
输出
SAD
【输入输出样例1说明】
[10,40]区间内的10、13 也都是幸运数,但它们分别依附于其他数字,所以不输出。19、23、28、31、32虽然其实也依附于其它幸运数,但因为那些数字不在给定区间 [10, 40] 内,所以它们在给定区间内是特殊的幸运数。
对于40%的数据,有1≤A,B≤100;
对于100%的数据,有1≤A,B≤10000。