题目描述
Description
小王对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
输入描述
Input
输入a和b(5 <= a < b <= 100,000,000)
输出描述
Output
按从小到大输出a,b之间所有满足条件的素数回文数
样本输入
Input example
5 500
样本输出
Output example
5
7
11
101
131
151
181
191
313
353
373
383
本来用筛选法建立素数表,再在素数表内判断回文数,但是。。。。,一直runtime error。查了资料,好像是数组太大了,num[100000000]导致内存不足。
网上还有个提示,10亿内的回文素数最大只到九百多万,据此更改数组大小为1千万,并把数组声明为stastic,或在函数外把数组声明为全局变量,但是。。。。还是runtime error,放弃挣扎。。。
直接在网上搜答案,发现有个答案是用一般方法,先判断回文数,再判断这个数是否素数,(判断素数方法是判断这个数能否被2~n-1这些数整除)。我想:试试吧。于是,把这段常规代码打出来,再加上先前网上那个提示,进一步优化代码。
结果accept。(后来分析,主要是得益于先判断回文数,再判断素数这个策略,它大大减少了运行时间,判断一个1千万内的数是否回文数好像最多只需10几步。)