2.3 有趣的对称素数
对称素数是素数集中的一个构形优美的子集,展现出素数对称美。
对称素数:一个整数m的逆序数就是m本身,则称m为对称数。一个整数m如果是对称数又是素数,则称m为对称素数。
例如,101,131,929等都是3位对称素数,9 989 899是7位对称素数。这些左右对称素数顺读与逆读是相同的,因此有些资料称为回文素数。
1. 偶数位对称素数探讨
是否存在偶数位对称整数?回答不能一概而论,须区分其具体位数来回答。
【命题】 不存在位数为偶数且大于2位的对称素数。
【证明】 不妨设位数大于2的偶数位对称整数m=ab…cddc…ba,数中两个数字a所在的位置序数为一奇一偶,两个数字b的位置序数也是一奇一偶……直到紧邻中心的两个数字d的位置序数还是一奇一偶。
显然m奇数位上的数字之和与偶数位上的数字之和相等,都等于a+b+…+c+d。
注意到1除以11余1,10除以11余10,100除以11余1,1000除以11余10……即整数10n除以11,当n为奇数时,余数为1;当n为偶数时,余数为10。因此可得
(偶数位对称数m除以11的余数)=(各奇数位数字和)+(各偶数位数字和)×10=(各偶数位数字和)×11+(各奇数位数字和-各偶数位数字和)=(各偶数位数字和)×11
可见位数大于2的偶数位对称整数m为11的倍数,不可能为素数。
之所以加“位数大于2”的约束,因为位数等于2的对称整数11为素数。也就是说,除了11这个唯一偶数位对称素数之外,不存在其他偶数位对称素数。
顺便指出,以上证明了一个更广泛的命题:任何一个整数能被11整除,当且仅当其奇数位上数字和与偶数位上数字和之差能被11整除。
根据这一命题,若某一大于2位的整数的奇数位上数字和与偶数位上数字和之差能被11整除,则该数不是素数。
2. 编程拓展
试统计指定奇数n(3≤n≤9)位对称素数的个数,并输出其中最大的对称素数。
(1)设计要点。
对于每一个n位奇数m通过以下两道检测。
应用试商判别法检测整数m是否为素数,如果不是素数,则返回;
如果m是素数,则分离整数m的n个数字存储于数组h[j](j=1~n),若j=1~n/2区间中的某一个j出现h[j]!=h[n-j+1],整数m的数字非对称,则返回。
凡通过以上两道检测的则为n位对称素数,应用s统计个数,并记录其中的最大数。
(2)程序设计。
(3)程序运行示例与变通。
请输入位数n(3≤n≤9):7 7位对称素数共有668个。 其中最大的对称素数为:9989899
变通:如果要显示其中所有对称素数,程序如何修改?
如果要输出n位对称素数中最大的3个素数,程序如何修改?