【程序13】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
package com.share.test11_20;
/**
* 【程序13题目:<br>
* 完全平方即用一个整数乘以自己例如1*1,2*2,3*3等,依此类推。<br>
* 若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。<br>
* 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
*
* @author brx
*/
public class Test13 {
public static void main(String[] args) {
test1();
}
/**
* 思路1:<br>
* 用数学思维来分解问题为平方差公式,再用计算机的穷举循环判断<br>
* 这种方法的优点是能够将所有的整数都找出来,而不用担心穷举的范围不够<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分解出两个因数,<br>
* 然后判断这连个因数之和除以2因数之差除以2分别是不是整数<br>
* 【注意:】<br>
* 将循环控制次数中的168该为13可以去掉重复出现的情况,因为两数相乘的中间就是平方, <br>
* 找出离168最近但又比168的平方数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("该数为:【" + x + "】 ");
System.out.print(x + "+100=" + y + "*" + y + " ");
System.out.println(x + "+268=" + z + "*" + z + " ");
}
}
}
}
/**
* 思路2:<br>
* 直接暴力的使用判断将穷举循环判断,只要控制穷举地范围够大就能包含所有结果<br>
* 判断是整数的方法很妙
*/
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);
}
}
}
}
网友评论