JavaScript初识-笔记之练习实例100(3)

                                             练习实例100(3)


题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

程序分析:

假设该数为 x。

1、则:x + 100 = n^2, x + 100 + 168 = m^2

2、计算等式:m2 - n2 = (m + n)(m - n) = 168

3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。

7、接下来将 i 的所有数字循环计算即可。


数学思想:

#设该数为x:x + 100 = n^2, n^2 + 168 = m^2。

#设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。

#在此基础上 k(k+2n)=168   , 若 k为奇数,k+2n也为奇数,等式不成立,所以k为偶数,

#则等式除以4,得(k/2)(k/2+n) =42, 令 t=k/2, (t>0)   

#t(t+n)=42  则 n= 42/t -t ; 由于n大于0,所以 t小于等于6 ,42/t 又是整数,得到 t 的取值为 1,2,3,6,

#对应得到 x =1581,261,21,-99

方法一:

  1. <script>
    for(var i=1;i<85;i++){
    	if(168 % i ==0){
    		var j = 168 / i;
    		if(i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0){
    			var m = (i + j) / 2;
                            var n = (i - j) / 2;
                            var x = n * n - 100;
    			document.write(x+"<br>");
    			}
    		}	
    	
    	}
    
    </script>

方法二:

#设该数为x:x + 100 = n^2, n^2 + 168 = m^2。

#设m=n+k(不妨设m,n,k均为自然数):带入m^2-n^2-168,得k^2+2nk=168。

#解得n=84/k - k/2;由于n,k均为自然数,则nk>=1,故1< =k^2<168,故1<=k<=12。

  1. <script>
    for(var x=1;x<13;x++){
    	var a = 84/x - x/2;
    	if(parseInt(a)==a){
    		var n = a * a - 100;
    		document.write(n+"</br>")
    		}
    	}
    
    
    </script>

方法三:

  1. <script>
    for(var i=1;i<85;i++){
    	if(168 % i == 0){
    		var j = 168 / i;
    		if(i > j){
    			var m = ( i + j )/2;
    			var n = ( i - j)/2;
    			if(  m * m - 268 == n * n - 100 && (n * n - 100) % 1 == 0 ){
    				var x = m * m - 268;
    				document.write(x+"</br>")
    				}
    			}
    		}
    	}
    
    </script>
    

方法四:

  1. <script>
    for(var m=1;m<168;m++){
    	for(var n=1;n<168;n++){
    		if((m+n)*(m-n)==168){
    			var x = n * n -100;
    			document.write(x+"</br>")
    			}
    		}
    	}
    </script>

方法五:

#思路:根据题意可先求出所求数的最大范围,并在范围内部循环测试是否有满足条件的数字,若有,则输出出来:

  1. <script>
    var i = 1;
    //求出最大范围:
    while(((i+1)*(i+1)-i*i) <= 168){
    	i += 1;}
    //循环测试并输出
    for(var j=1;j<i;j++){
    	for(var k=1;k<i;k++){
    		if((k*k - j*j) == 168){
    			var s = k*k - 268;
    			document.write(s+"</br>");
    			}
    			
    		}
    	}
    	
    	
    </script>

方法六:

分析:
设这个整数为x
1、 x+100=n^2和x+100+168=m^2
推出 m^2-n^2=168
即   (m+n)(m-n)=168
设    m+n=i m-n=j
则    i*j=168
由    i>0 j>0   推出  i%2=0 j%2=0
由    168=2*2*2*3*7
上面两个条件推出i与j值的范围[2,4,6,12,14,28,42,84]
反推:m=(i+j)/2和n=(i-j)/2 并且 n>0 推得 i>j
则     i=[14,28,42,84]
       j=[12,6,4,2]

  1. <script>
    var arr1=[14,28,42,84];
    var arr2=[12,6,4,2];
    for(var i=0;i<4;i++){
    	var m=(arr1[i]+arr2[i])/2;
    	var n=(arr1[i]-arr2[i])/2;
    	var x=x=n*n-100;
    	document.write(x+"</br>");
    }
    </script>
发布了31 篇原创文章 · 获赞 35 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_39934520/article/details/102527445