对于优化的思路点拨(绝对简单易懂!)
查看原帖
对于优化的思路点拨(绝对简单易懂!)
1113533
xu_duo楼主2024/8/8 02:24

这道题大家是不是这样: 已红温

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函数,清爽!!!

2024/8/8 02:24
加载中...