本帖最后由 wyj915752168 于 2013-3-5 22:04 编辑
下面的问题虽然简单的程序可以写出,但是问题在于输入数据过大时需要很长时间(n=1000000需要几十分钟)
于是老师要求我们优化一下算法,请教大神提一点意见(只需要有什么思路即可,代码当然是自己写。。。)
题目
已知m,n 为大于0 的正整数: m, n 在1 到k 之间,且满足(m2-mn-n2)2=1。给定一个k 值,则求满足上述等式的m 和n,使得m2+n2 的值最大。
例如 k=4, 则有m=3,n=2 满足了等式(32-3×2-22)2=1,且小于4 的m2+n2=32+22=13
是最大的。
随着K 取值较大(例如可以使用一组数据进行测试,例如k=1000,10000,100000,……),你就会发现程序运行速度开始变慢,那么有什么方法可以提升程序的运行速度?请改写你的程序,验证你的方法,以提升程序运行速度
附上最白痴的算法代码,能力有限
ps据说可用时间复杂度。。。求大神解释
- #include <stdio.h>
- #include <math.h>
- int main(void)
- {
- int repeat, ri;
- int k,m,n,z;
- int m0,n0,z0;
- scanf("%d", &repeat);
- for(ri = 1; ri <= repeat; ri++){
- scanf("%d",&k);
- z0=m0=n0=0;
- for(m=1;m<=k;m++){
- for(n=1;n<=k;n++){
- if(pow((m*m-m*n-n*n),2)==1){
- z=m*m+n*n;
- if(z>z0){
- z0=z;
- m0=m;
- n0=n;
- }
- }
- }
- }
- printf("It has the biggest result of (m^2+n^2) which is %d, when m=%d, n=%d.\n",z0,m0,n0);
- }
- }
复制代码
|