【程序13】
題目:一個整數(shù)阅签,它加上100后是一個完全平方數(shù)掐暮,再加上168又是一個完全平方數(shù),請問該數(shù)是多少政钟?
package com.share.test11_20;
/**
* 【程序13題目:<br>
* 完全平方即用一個整數(shù)乘以自己例如1*1路克,2*2樟结,3*3等,依此類推精算。<br>
* 若一個數(shù)能表示成某個整數(shù)的平方的形式瓢宦,則稱這個數(shù)為完全平方數(shù)。<br>
* 一個整數(shù)灰羽,它加上100后是一個完全平方數(shù)驮履,再加上168又是一個完全平方數(shù),請問該數(shù)是多少廉嚼?
*
* @author brx
*/
public class Test13 {
public static void main(String[] args) {
test1();
}
/**
* 思路1:<br>
* 用數(shù)學(xué)思維來分解問題為平方差公式玫镐,再用計算機的窮舉循環(huán)判斷<br>
* 這種方法的優(yōu)點是能夠?qū)⑺械恼麛?shù)都找出來,而不用擔(dān)心窮舉的范圍不夠<br>
* x+100=y*y<br>
* x+100+168=z*z<br>
* y*y+168=z*z<br>
* (z+y)(z-y)=168<br>
* 找出z和y就能夠求出x怠噪,將168分解出兩個因數(shù)恐似,<br>
* 然后判斷這連個因數(shù)之和除以2因數(shù)之差除以2分別是不是整數(shù)<br>
* 【注意:】<br>
* 將循環(huán)控制次數(shù)中的168該為13可以去掉重復(fù)出現(xiàn)的情況,因為兩數(shù)相乘的中間就是平方舰绘, <br>
* 找出離168最近但又比168的平方數(shù)169的平方根13
*/
public static void test() {
for (int i = 1; i <= 168; i++) {
int m = 0, n = 0;
if (168 % i == 0) {
m = i;
n = 168 / i;
if ((m + n) % 2 == 0 && (m - n) % 2 == 0) {
int z = (m + n) / 2;
int y = (m - n) / 2;
int x = z * z - 268;
System.out.print("該數(shù)為:【" + x + "】 ");
System.out.print(x + "+100=" + y + "*" + y + " ");
System.out.println(x + "+268=" + z + "*" + z + " ");
}
}
}
}
/**
* 思路2:<br>
* 直接暴力的使用判斷將窮舉循環(huán)判斷蹂喻,只要控制窮舉地范圍夠大就能包含所有結(jié)果<br>
* 判斷是整數(shù)的方法很妙
*/
public static void test1(){
for(long i=-100000;i<100000;i++){
if(Math.sqrt((i+100))%1==0&&Math.sqrt((i+100+168))%1==0){
System.out.println(i);
}
}
}
}