判断某数是否为同余数-C语言|Zam9036博客

文章词云

代码语言

C语言

前言

近期,一个数学系专业的朋友联系我,问我能不能写出一个程序实现“判断一个数是否为整同余数”的功能,他还给了我同余数的定义:同余数是一个三边均为有理数的直角三角形的面积

问题研究

对于程序设计来说,仅仅按照这个定义来实现“判断一个数是否为同余数”的功能实在困难,就单纯让计算机来判断一个数是不是有理数就是一门学问。

所以我只好另辟蹊径,找找还有什么方法能验证一个数是同余数。在百度百科上,我看到了数学家给出的一个重要结论,也是验证n是整同余数的充要条件:

重要结论

我很敬佩数学家们的智慧,能得出这个重要的结论,这对用程序验证一个数是整同余数指明了思路。

四个变量

首先,我们需要四个变量:n,a,b,v

这四个变量的关系是:需要寻找n,要先确定a,b,v

四个条件

然后,这四个变量需要满足以下四个条件

  • (a,b)=1
  • a,b一奇数一偶数
  • a,b为正整数并且a>b
  • a,b,n,v需要满足图中等式

条件一:(a,b)=1

我们需要弄清楚这个式子是什么意思。我问了一下数学系的朋友,这式子的意思是说a,b的最大公因数是1,即a,b互质。判断两个数互质的算法我依稀记得是C语言课的练习题,很好解决。在这里我采用欧几里德算法来求取两个数的最大公因数。如果最大公因数是1也就是a,b互质的话,则函数huzhi返回值为1;不互质返回值为0,代码如下:

//条件一:a,b互质
//若互质返回1,不互质返回0
int huzhi(int a,int b){
   
    int t;
    if(a<b)
    {
   
        t=a;a=b;b=t;
    }
    while(a%b)
    {
   
        t=b;
        b=a%b;
        a=t;
    }
    if(b==1)
    {
   
        return 1;
    }
    else
    {
   
        return 0;
    }
}

条件二:a,b一奇数一偶数

这个条件很简单,只有两种情况:

  • a是奇数并且b是偶数
  • b是奇数并且a是偶数
//条件二:a,b一奇数一偶数
//满足条件返回1,不满足条件返回0
int jio(int a,int b){
   
    if((a%2==0&&b%2!=0)||(a%2!=0&&b%2==0))
    {
   
        return 1;
    }
    else
    {
   
        return 0;
    }
}

条件三:a,b为正整数并且a>b

这个条件也很简单,可细化为三个条件:

  • a,b为整数
  • a>0并且b>0
  • a>b
//条件三:a,b正整数并且a>b
//满足条件返回1,不满足条件返回0
int tiaojian(int a,int b){
   
    if(a>0&&b>0&&a>b)
    {
   
        return 1;
    }
    else
    {
   
        return 0;
    }
}

条件四:a,b,n,v需要满足等式

来解释一下这个等式,这个等式or的意思是或者,所以这个等式也可以细化为三个等式三个条件:

  • n v 2 = 6 a 2 b 2 − a 4 − b 4
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值