这道题大家是不是这样:
已红温
1.前言
首先,这道题判断回文数和判断质数的方法也是很简单。而时间复杂度也显而易见,判断回文数是要优先高于判断质数的。
但是,出题者怎么可能让你改个顺序就过了呢,所以我们需要优化。
2. 判断回文数的优化
对于回文数的判断,这里推荐使用逐位相加法。
参考代码
while(num!=0) newnum=newnum*10+num%10,num/=10;
3. 判断质数的优化
第一步,取模:
判断质数呢,我们小学二年级学过,判断100以内的质数,先从2,3的倍数排除,可以省很大一部分时间。同样,我们在判断一个大数是否是质数,可以先拿2,3去取模。
第二步,循环的优化:
众所周知,我们任何一个数都可以化为形如nk+(n-1)形式。同理,我们上一步已经排除了2,3的倍数,所以所有数字都可以形如6k,6k+1,...,6k+5。排除所有2,3倍数后,只剩6k+1和6k+5,而6k+5还能写成6(k+1)-1。因为k可以变化(遍历),所以判断质数只需要判断6k±1能不能把要判断的数整除就行了。
参考代码
for(int i=5;i*i<=num;i+=6) if(num%i==0||num%(i+2)==0)
总结
这次是本蒟蒻兼WA自动机第一次写类似题解的内容,希望多包含。也希望大家早日AC!
PS
这道题推荐使用bool函数,清爽!!!