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

本文探讨了利用数学技巧解决整数x的限制条件问题,通过平方差公式推导x的上下限,并通过暴力搜索找到满足sqrt(x+100)=y与sqrt(x+268)=z的整数解。两种编程实现方法分别展示了如何避开math库,直接进行整数运算和查找特定平方差关系的整数对。

利用math求法


/*
  思路:
    1.根据已知条件判断该整数 x 的上下限
        由已知条件得
            sqrt(x + 100) = y    由 y>=0 可知 x 的下限即为 -100
            sqrt(x + 268) = z
        由上面两式可得
            z^2 - y^2 = 168
        按照两个相邻整数的平方差间隔越来越大的特性,找出极限情况下的数值 y 与 z
        将 z^2 - 268 或 y^2 - 100 作为 x 的上限
    2.然后在范围内暴力搜索,找出所有符合描述的值
        根据 x 的值计算 y, z
        判断 y, z 均为整数,即输出 x
*/

# include <stdio.h>
# include <math.h>

int main()
{
    int x, c1, c2, L, H;
    c1 = 100;
    c2 = 168;

    L = -c1;

    int i = 0;    
    for (i = 1; i*i - (i - 1)*(i - 1) <= c2; ++i)
        ;

    H = i*i - (c1 + c2);

    int j;
    double y, z;
    for (j = L; j <= H; ++j)
    {
        y = sqrt(j + c1);
        z = sqrt(j + c1 + c2);
        if (y == (int)y && z == (int)z)
            printf("x的值为 %d\n", j);
    }

    return 0;
}
不使用math做法
#include <stdio.h>

int main (void)
{
    int  i, j, m, n, x;
    for (i = 2; i <= 168 / 2; i=i+2)
    {
        if (168 % i == 0)
        {
            j = 168 / i;
            if ( i > j && (i + j) % 2 == 0)
            {
                m = (i + j) / 2;
                n = (i - j) / 2;
                x = n * n - 100;
                printf ("%d + 100 = %d * %d\n", x, n, n);
                printf ("%d + 268 = %d * %d\n", x, m, m);
            }
        }
    }
    return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值