Project Euler problem 4

这题的意思就是求一个最大的6位的回文数,是其可以表示为两个三位数的乘积


最普通的方法就是直接二重循环枚举了。然后判断是不是回文


不过我们需要更进一步

由于是需要6位的回文数

令该数为

P=100000x+10000y+1000z+100z+10y+x
P=100001x+10010y+1100z
P=11(9091x+910y+100z)

可以发现,其一定为11的倍数。

也就是说如果最大的6位回文数能表示成a*b

那么a能被11整除或者b能被11整除

这样我们的二重循环枚举a,b可以优化到 90 * 999的复杂度了


事实上,所有11的数的倍数有这样一个性质,奇数位数字之和与偶数位数字之和的差为11的倍数

对于偶数回文数,显然这个差为0,则这个必然是11的倍数了


你可能感兴趣的:(Project Euler problem 4)