Project Euler - Problem 4
来源:互联网 发布:snmp网络管理模型 编辑:程序博客网 时间:2024/05/19 11:48
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 X 99.
Find the largest palindrome made from the product of two 3-digit numbers.
通常解法:
def isPalindrome(n): s = str(n) return s == s[::-1]def findLargestPalindrome(): largestPalindrome = 0 for a in range(100, 1000): for b in range(100, 1000): if isPalindrome(a*b) and a*b > largestPalindrome: largestPalindrome = a*b return largestPalindrome
分析:
1、每个palindromic数可以表示为:
P=100000x+10000y+1000z+100z+10y+x
P=100001x+10010y+1100z
P=11(9091x+910y+100z)
且P=ab,由每个数可以分解为N个素数的乘积。可知,a和b中至少有一个可以被11整除。
2、a*b和b*a的结果可以只计算一次。
3、从大往小计算,可以更早的发现结果。
改进算法:
def findLargestPalindrome(): largestPalindrome = 0 a = 999 while a >= 100: if not a % 11: b = 999 db = 1 else: b = 990 # 990是小于1000又能够被11整除的最大数 db = 11 while b >= a: if a * b <= largestPalindrome: break # a和b都是从大到小遍历,相乘的结果不断变小。 if isPalindrome(a*b): largestPalindrome = a*b b -= db a -= 1 return largestPalindrome
- Project Euler - Problem 4
- Project Euler problem 4
- Project Euler Problem 4
- Project Euler Problem 4
- 【Project Euler】【Problem 4】Largest palindrome product
- Project Euler Problem 4: Largest palindrome product
- Euler Project Problem 6
- project euler problem 11
- Project Euler Problem 81
- Project Euler Problem 60
- Project Euler Problem 59
- Project Euler Problem 58
- Project Euler Problem 57
- Project Euler Problem 16
- Project Euler Problem 30
- Project Euler Problem 31
- Project Euler Problem 32
- Project Euler Problem 14
- 11级_Java_曹建波5.04 事件适配器
- Project Euler - Problem 2
- 进程和线程的区别
- Project Euler - Problem 3
- Windows Phone 开发学习笔记(五) Hello Windows Phone之虎头蛇尾
- Project Euler - Problem 4
- Project Euler - Problem 5
- 我理解的逻辑地址、线性地址、物理地址和虚拟地址(补充完整了)
- Project Euler - Problem 6
- .NET Framework各版本比较
- Project Eurler - Problem 7
- 时域测量与频域测量方法的分析
- Project Euler - Problem 8
- Project Euler - Problem 9