Project Euler Problem 27小结
Project Euler上有很多有意思的问题,刚做到第27题,对这个问题做个小结。
Problem 27:
Euler有一个著名的方程n^2+n+41,当n=0到39时,方程结果均为质数。如今人们用电脑计算,发现了另一个方程n^2-79n+1601,当n=0到79时,方程结果也均为质数。
设一方程形如n^2+an+b,其中|a|<1000,|b|<1000,n为从0开始的连续自然数。
求使得公式能获得最多质数的a和b,输出结果为a*b。
问题很简单,首先写好判断质数的方法:
voidEuler_Cal_27(){ int n=0; int maxn = 0; int expr = 0; int result = 0; for(int b=1; b<1000; b++) { if(isPrime(b)) { for(int a=-b; a<1000; a++) { n = 0; expr = n*n + a*n + b; while( expr>0 && isPrime(expr) ) { n++; expr = n*n + a*n + b; } if( n>maxn ) { maxn = n; result = a*b; } } } } cout<< result <<endl;}此时程序运行时间减少至0.17s。
从这次优化小程序发现,优化程序时大多从代码本身入手,忽略问题,不去想原理,在进一步提高程序性能的时候容易遇到瓶颈。以后要注重锻炼自己理解问题的能力,基础还是很差,需要提高。