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

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

由题意我们可以设该数为 x ,加100后得到的完全平方数为 y 2 ,再加168后得到的完全平方数为  z^2 ,则有

image.png

即得:

image.png

这里分为四种情况:

y>0,z>0

y > 0 , z < 0

y < 0 , z > 0

y < 0 , z < 0

若要得到 ( z + y ) ( z − y ) = 168 (z+y)(z-y)=168 (z+y)(z−y)=168,那么以上四种情况可以归为两类:

0<(z+y)<168,0<(z−y)<168

− 168 < ( z + y ) < 0 , − 168 < ( z − y ) < 0

下面两个图是 y 、 z、 z + y、 z − y 的值域示意图,左图为168=z^2-y^2 ,右图为 ( z + y ) ( z − y ) = 168

image.png

实际上,无论 y与 z取何值,最终都能得到 2 y^2+168=z^2 y

image.png

这里设 y 与 z都取正值,则 z + y 、 z − y也为正值且其值大于 0小于等于 168。


另,由于:


x+100=y20


因此可得 x ⩾ − 100


所以我们可以利用的条件就是:


image.png


实现代码如下:


#include "stdio.h"
#include "math.h"
int main(void)
{
  int x = -100;
  double y = 0, z = 0;
  // y+,z+,0<(z+y)<168,0<(z-y)<168
  do {
  y = sqrt(x + 100);
  z = sqrt(x + 100 + 168);
  if (y == (int)y && z == (int)z)
    printf("%d\n", x);
  x++;
  } while ((z + y) > 0 && (z + y) <= 168);
  /*
  * y与z的另外三种取值,其结果与y+,z+一致
  *
  // y-,z-,-168<(z+y)<0,-168<(z-y)<0
  do{
  y = -sqrt(x + 100);
  z = -sqrt(x + 100 + 168);
  if (y == (int)y && z == (int)z)
    printf("%d\n", x);
  x++;
  } while ((z + y) >= -168 && (z + y) < 0);
  // y+,z-,-168<(z+y)<0,-168<(z-y)<0
  do {
  y = sqrt(x + 100);
  z = -sqrt(x + 100 + 168);
  if (y == (int)y && z == (int)z)
    printf("%d\n", x);
  x++;
  } while ((z + y) >= -168 && (z + y) < 0);
  // y-,z+,0<(z+y)<168,0<(z-y)<168
  do {
  y = -sqrt(x + 100);
  z = sqrt(x + 100 + 168);
  if (y == (int)y && z == (int)z)
    printf("%d\n", x);
  x++;
  } while ((z + y) > 0 && (z + y) <= 168);
  *
  *
  */
  return 0;
}


计算结果为:-99、21、261、1581

相关文章
|
8月前
|
C语言
C语言之回文数的求解。回文数一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
C语言之回文数的求解。回文数一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
135 0
|
1月前
|
算法
容斥原理:能被整除的数
容斥原理:能被整除的数
|
1月前
将一个正整数分解质因数
将一个正整数分解质因数。
20 2
|
13天前
2.两数相加
2.两数相加
|
1月前
|
机器学习/深度学习
完全平方数
完全平方数.。
26 0
|
1月前
38.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
38.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
27 0
|
1月前
|
C++
有效的完全平方数(C++)
有效的完全平方数(C++)
32 0
|
6月前
|
C语言
求一个整数的所有因数
C 语言实例 - 求一个整数的所有因数
54 1
|
7月前
|
人工智能 算法 程序员
求两个正整数的最小公倍数
求两个正整数的最小公倍数
|
10月前
wustojc求三位整数的逆序数
wustojc求三位整数的逆序数
37 0