c语言经典例题练习-2(完全平方数)

题目:一个正整数,它加上100后是一个完全平方数,加上168又是一个完全平方数,请问该数是多少?
分析:
首先强调一下,完全平方数和完全数不是一个 概念,完全平方数:若一个数能写成某一个数平方的形式,那么这个数就是完全平方数,比如25=5*5,36=6*6,那么25,36都是完全平方数,另外虽然25=(-5)*(-5),但对于本题不需要区分正负,因为我们本题的关键是用的平方数,而不是平方根,所以本题不考虑负平方根的情况;而完全数(又叫完数):它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身,比如1+2+4+7+14=28,28就是完数。关于完数真题知识点链接入口
对于本题,思路就是求什么设什么,设要求的数是x,由题可得关系式:x+100=m*m,m*m+168=n*n.对于第一个式子,因为100以上最小的完全平方数是121,所以我们能分析出来x>=21.对于第二个式子,左右移项可变形为(n-m)*(n+m)=168,从这个式子可以知道(n-m)和(n+m)符号相同且其中至少有一个为偶数。我们假设(n-m)是偶数,通过举几个简单的加减算式例子可以发现,如果两个数相减后得出的差是偶数,那么这两个数的奇偶性一定相同,又因为之前得出过结论:这两个数中至少一个为偶数,那么这两个数都是偶数;那如果假设(n+m)是偶数呢,一样的,只有两个奇偶性相同的数相加才会的出偶数
综上,(n-m),(n+m)都是正偶数,也就是都>=2.通过列举发现,只有这几个符合条件:2*84=168,4*42=168,6*28=168,12*14=168.分别讨论即可。
代码及运行结果如下:

#include <stdio.h>
int main()
{
    int a[4]={2,4,6,12};//这是上面分析的四种情况
	int i,b,c,x,m,n;//这里将m-n用b表示,m+n用c表示
    for(i=0;i<4;i++)
    {
        b=a[i];
        c=168/a[i];
        m=(c-b)/2;//这里的m就是上面分析的那个m
        n=(b+c)/2;//n也是,和m一样
        x=m*m-100;
        if(m*m+168==n*n&&x>0)
        {
        	printf("%d\n",x);
        }
    }
    return 0;
}

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值