收藏 分享(赏)

多项式辗转相除法求最大公因式.doc

上传人:weiwoduzun 文档编号:2711685 上传时间:2018-09-25 格式:DOC 页数:4 大小:14.73KB
下载 相关 举报
多项式辗转相除法求最大公因式.doc_第1页
第1页 / 共4页
多项式辗转相除法求最大公因式.doc_第2页
第2页 / 共4页
多项式辗转相除法求最大公因式.doc_第3页
第3页 / 共4页
多项式辗转相除法求最大公因式.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、#include#include#includestruct chain /定义一个多项式的结构体int n; /该多项式的最高次数double *an; /存放多项式的系数;void creat_chain(struct chain *c) /建立一个多项式int i,n;double ai;printf(“请输入该多项式最高次数:“);scanf(“%d“,(*c).n = n;(*c).an = (double *)calloc(n+1,sizeof(double); /给该多项式系数动态分配内存printf(“按下列格式输入系数:(例如 x4 + 2x3 - 7x1 + 5 输入:1

2、2 0 -7 5)n“);printf(“等待输入:“);for(i=n;i=0;i-)scanf(“%lf“,(*c).ani = ai;void show(struct chain c) /按照多项式的格式显示多项式int i=c.n;printf(“多项式是:“);while(i=0)if(i!=c.n)switch(i)case 1:printf(“%.2lfX“,c.ani);break;case 0:printf(“%.2lf“,c.ani);break;default:printf(“%.2lfX%d“,c.ani,i);break;i-;printf(“n“);void do_

3、add(struct chain *ch,struct chain ch1,struct chain ch2) /两个多项式求和int i;if(ch1.n=ch2.n)(*ch).n = ch1.n; /求和之后多项式的最高次应是 ch1 和 ch2 中较高的次数(*ch).an = (double *)calloc(*ch).n+1,sizeof(double);for(i=0;i=0) /依次从高次项向低次项进行系数检验i-;(*r).n = i; /注意:如果多项式 r 为 0,这里 i=-1bool check_zero(struct chain r) /检验多项式 r 的最高次数i

4、nt i;for(i=0;i=1e-6) /如果一旦有一个不为零,返回 falsereturn false;return true; /全为零的情况下返回 truevoid do_div(struct chain ch1,struct chain ch2) /辗转相除法,公式:ch1 = q*ch2+r;int i = 0,j;double tmp;struct chain q,r;if(check_zero(ch2) /判断所除的多项式是否为 0,若为 0,退出;printf(“所除的多项式不能为 0!n“);exit(0);q.n = ch1.n - ch2.n; /q 的最高次数为 ch

5、1 和 ch2 最高次数相减r.n = ch1.n - 1;r.an = (double *)calloc(r.n+1,sizeof(double); /为系数动态分配内存q.an = (double *)calloc(q.n+1,sizeof(double);while(i=0;j-)if(j=q.n-i)r.anj = ch1.anj - tmp*ch2.anj-q.n+i; /高次对应相减elser.anj = ch1.anj; /低次保留if(check_zero(r) break; /若余式 r 系数全为零,退出循环ch1 = r; /ch2 没除干净,将 r 赋给 ch1,继续除

6、ch2i+;printf(“-n“);printf(“q(x):“);show(q); /显示每一步的多项式 qprintf(“r(x):“);show(r); /显示每一步与 q 对应的多项式 rprintf(“-n“);check_change( /修改余式 r 的最高次数,即修改 r.nif(r.n=-1) /r.n=-1 时,说明最大公因式已经找到printf(“所求最大公因式的“);show(ch2); /输出结果free(r.an); /回收动态分配内存elsedo_div(ch2,r); /辗转相除void main()struct chain ch1,ch2,ch;printf(“*建立第一个多项式*nn“);creat_chain(show(ch1);printf(“*建立第二个多项式*nn“);creat_chain(show(ch2);printf(“*以上两个多项式求和*nn“);do_add(show(ch);printf(“*以上两个多项式求公因式*nn“);do_div(ch1,ch2);/回收动态分配内存free(ch1.an);free(ch2.an);free(ch.an);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报