最近看到很多解
ax+by==c这类的~
其实也可以用辗转相除法的思想实现~
举个例子就明白了~
例如求解
39x+17y==10001
用辗转相除法~
+a+0=39
+0+b=17
+a-2b=5
-3a+7b=2
7a-16b=1
-17a-39b=0
这里可以得到
gcd(39,17)=1
可以看出t*(39*7-17*16)==t
10001%gcd(39,17)==0
所以该方程存在整数解
39*(7*10001)-17*(16*10001)==10001
如果x取最少正整数
那么
x=(7*(10001%17))%17=1
y=(10001-1*39)/17=586
所以
x=1,y=586是这个方程的一个特解
通解为
{
x=1+17t
y=(10001-39*(1+17t))/17
}
化简一下就是
{
x=1+17t
y=586-39t
}
下面这个代码可以得到这个不定方程的通解
程序代码:
#include<stdio.h>
#include<assert.h>
int main( void )
{
int i=0;
const int a=39;
const int b=17;
for (i=0;i!=30;++i)
{
assert(39*(1+17*i)+17*(586-39*i)==10001);
printf("39*(%-4d)+17*(%-4d)=10001\n",1+17*i,586-39*i);
}
return 0;
}
拓展一下,其实"剩余定理"实质就是一个不定方程(组),当时我看某方法就是怎么配个常数n,当时怎么也看不出一个所以然出来,然后用辗转相除法就容易理解多了,当然如果是3组(多组)数据则算出一组后把参数代入消元再继续算下一组就是了
~
[此贴子已经被作者于2018-4-19 21:18编辑过]