美文网首页算法数据结构和算法分析
算法学习(2)----丢番图方程

算法学习(2)----丢番图方程

作者: 鱼山樵子 | 来源:发表于2016-07-29 11:57 被阅读0次

       之前一篇随笔"算法学习(1)----扩展欧几里得算法"记录了对朴素欧几里得算法和扩展欧几里得算法的学习和认识。学习所用书籍为 [美]Anany Levitin 所著《算法设计与分析基础》

        书后习题1.1 第10题 b 题如下:


改写扩展欧几里得算法对丢番图方程 ax+by=c 求解,系数 a,b,c 为任意整数。


看完题目开始思考,该题与扩展欧几里得算法有何联系?如果 c 为 a 和 b 的最大公约数,那么直接用扩展欧几里得算法就可以求出 x 和 y 了,但这里 a,b,c 为任意整数啊。

苦思片刻,终于顿悟:假设 a 和 b 的最大公约数为 d ,如果 c= k*d,那么先令 ax+by=d,再取 x=x*k, y=y*k 不就行了吗?如果 c 不是 d 的整数倍,那么是否就说明该方程无解呢?这个就不愿意再去费脑筋证明了,直接百度“丢番图方程”,果然验证了我的猜想:


不定方程一次不定方程是形式如a1x1 + a2x2 + ... + anxn= c的方程,一次不定方程有整数解的充要条件为:(a1,...,an)须是c的因子,其中(a1,...,an)表示a1,...,an的最大公因子。若有二元一次不定方程ax + by= c,且(a,b) | c,则其必有一组整数解x1,y1,并且还有以下关系式:

* x= x1 +[b / (a,b)]t

* y= y1 −[a / (a,b)]t

t为任意整数,故此一次不定方程有无限多解。请参见贝祖等式。


故得到代码如下:


using namespace std;

int diophantine(int a,int b,int c,int &x,int &y);

int exgcd(int m,int n,int &x,int &y);

int main(int argc,char* argv[])

{

int a,b,c,x,y,r;

while(true)

{

cout<<"Give me 3 interger(a,b,c): ";

cin>>a>>b>>c;

r=diophantine(a,b,c,x,y);

if(r==-1)

{

cout<<"There is no answers of x,y for "<<a<<" and "<<b<<"\n";

}

else

{

cout<<"a*x+b*y=c:"<<a<<"*"<<x<<"+"<<b<<"*"<<y<<"="<<c<<endl;

}

}

return 0;

}

int exgcd(int m,int n,int &x,int &y)

{

if(n==0){

x=1,y=0;

return m;

}

int r=exgcd(n,m%n,y,x);

y -= m/n*x;

return r;

}

int diophantine(int a,int b,int c,int &x,int &y)

{

int r=exgcd(a,b,x,y);

int k=c/r;

if(k*r==c){

x*=k,y*=k;

return r;

}

return -1;

}


在Linux控制台编译运行验证:

成功!

相关文章

  • 算法学习(2)----丢番图方程

    之前一篇随笔"算法学习(1)----扩展欧几里得算法"记录了对朴素欧几里得算法和扩展欧几里得算法的学习和认识...

  • Python3 欧拉计划 问题66-70

    66、丢番图方程   考虑如下形式的二次丢番图方程:      x2 – Dy2 = 1举例而言,当D=13时,x...

  • 学习笔记《Diophantine equation》

    在学习数论的时候,看到居然有可以描述素数的丢番图方程,这个世界真的好奇妙~ 这个方程是 Jones et al. ...

  • 2017-11-23

    7.连分数,丢番都方程(不定方程) 1).形如a=a。+1/ a1+1...

  • 01.数论

    【数论】 数论是纯粹数学的分支之一,主要研究整数的性质。整数可以是方程式的解(丢番图方程)。有些解析函数(像黎曼ζ...

  • 书籍汇集

    《丢番图的算数》——求解方程a²+b²=c²,找到能让其成立的整数a.b.c。 《几何原本》——欧几里得 《数学原...

  • 麦当劳里的丢番图方程 Linear Diophantine Eq

    数论课里, Dr.Cavior 讲过一个真的故事, One Sunday morning ?, he just m...

  • 丢番图谜题

    被誉为代数之父的丢番图, 他的墓志铭是一道多项式: 上帝给予的童年站了六分之一,又过了十二分之一,两颊长胡,再过七...

  • sm2算法理解

    sm2算法是国密标准的非对称算法标准。基于ecc的扩展 椭圆曲线算法 破解难度高于rsa算法。椭圆曲线方程:y2=...

  • 数学模型——传递函数

    1.微分方程 2.传递函数 3.方块图和等效变换 4.信号流图 1.微分方程 二阶常系数方程 2.传递函数 定义:...

网友评论

    本文标题:算法学习(2)----丢番图方程

    本文链接:https://www.haomeiwen.com/subject/vkrzjttx.html