文章目录
代码语言
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 nv^2=6a^2b^2-a^4-b^4 nv2=