社区
数据结构与算法
帖子详情
一个小问题,可不简单哦!
寻开心
2003-06-05 02:24:12
对于一个线形函数:
ax + by + c = 0
如何转换成为这样的参数表达式
x = mk + n
y = pk + q
其中 a, b, c, m, n, p, q 都是整数k是参数
例如:
5y - 3x -1 = 0
可以化解成为:
x = 5k + 3
y = 3k + 2
...全文
32
10
打赏
收藏
一个小问题,可不简单哦!
对于一个线形函数: ax + by + c = 0 如何转换成为这样的参数表达式 x = mk + n y = pk + q 其中 a, b, c, m, n, p, q 都是整数k是参数 例如: 5y - 3x -1 = 0 可以化解成为: x = 5k + 3 y = 3k + 2
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
levinjoe
2003-06-05
打赏
举报
回复
呵呵,想法差不多。
我的解法如下:
将 x,y代入等式,由于对任意整数k成立,有:
a*m+b*q=0;
a*n+b*q+c=0;
从而只要解线性同余式就可以,将(m,n)作为通解,(n,q)作为特解.
求解算法如下:(由Euclid算法衍生出来,详见实用算法的分析与程序设计)
#include<iostream.h>
/*Å·¼¸ÀïµÂËã·¨ÑÜÉú£¬Çó½âͬÓà·½³Ì;*/
/* d=gcd(a,b)=ax+by */
long extend_Enclid(long a,long b,long &x,long &y)
{
long temp1,temp2;
if ( b==0)
{
x=1;
y=0;
return a;
}
else
{
temp1=extend_Enclid(b,a%b,x,y);
temp2=x;
x=y;
y=temp2-(a/b)*y;
return temp1;
}
}
void main()
{
long a,b,c,d,x,y,m,n,p,q;
cin>>a>>b>>c;
d=extend_Enclid(a,b,x,y);
m=-b/d;
p=a/d;
n=x*(-1)*c/d;
q=y*(-1)*c/d;
cout<<"ͨ½âΪ£º\n"
<<"X="<<m<<"K";
if(n>0)
cout<<"+"<<n<<endl;
else if (n==0)
cout<<endl;
else
cout<<n<<endl;
cout<<"Y="<<p<<"K";
if(q>0)
cout<<"+"<<q<<endl;
else if (q==0)
cout<<endl;
else
cout<<q<<endl;
}
具体n,q的取值必须确定一个范围才能求出。在这里就只好取默认了。
KenShin1978
2003-06-05
打赏
举报
回复
to:HUNTON()
这样解不能保证系数为整数
HUNTON
2003-06-05
打赏
举报
回复
上面是没有考虑a,b为0的,确切一点应该是:若b不为0,则x随便设一个x = mk + n(m,n为具体的数,m不为0),然后把它代如原式ax + by + c = 0,就可以解出y = pk + q了,若b不为0,则y随便设一个y = pk + q(p,q为具体的数,p不为0),然后把它代如原式ax + by + c = 0,就可以解出了x = mk + n,
HUNTON
2003-06-05
打赏
举报
回复
X随便设一个x = mk + n(m,n为具体的数,m不为0),然后把它代如原式ax + by + c = 0,就可以解出y = pk + q了
dcyu
2003-06-05
打赏
举报
回复
将x = mk + n
y = pk + q
代入:
ax + by + c = 0 中有:
(am+bp)k+(an+bq+c)=0
比较系数有:
am+bp=0
an+bq+c=0
对于m,p,只要取m=b, p=-a 就可以了
对于n,q,需要用到求解模线性方程的知识。
下面是偶写的C++程序,在VC++6.0环境下运行,
里面用到了前任斑竹海星的数论算法库,其中偶做了点修改。
#include <iostream>
using namespace std;
/*********************************************
扩展欧几里德算法求gcd(a,b)=ax+by
copyright starfish
2000/10/24
*********************************************/
//extended euclid algorithm to calculate the gcd(a,b),
//as well as the integer x and y where gcd(a,b)=a*x+b*y
int ext_euclid(int a,int b,int &x,int &y)
{
int t,d;
if (b==0) {x=1;y=0;return a;}
d=ext_euclid(b,a %b,x,y);
t=x;
x=y;
y=t-a/b*y;
return d;
}
/********************************************
求解模线性方程 ax=b (mod n) ,n>0
//copyright starfish
//modified by dcyu
//re返回第一个x解
*********************************************/
void modular_linear_equation_solver(int a,int b,int n,int &re)
{
int e,d;
int x,y;
d=ext_euclid(a,n,x,y);
if (b%d!=0) { cout<<"No answer!"<<endl; exit(1); }
else
{ e=(x*(b/d))%n;
// for (i=0;i<d;i++) //notice! here x maybe <0
// printf("The %dth answer is : %ld\n",i+1,(e+i*(n/d))%n);
re=e%n;
}
}
int main()
{
int a, b, c, m, n, p, q;
cin>>a>>b>>c;
m=b;
p=-a;
if(a!=0&&b!=0)
{
modular_linear_equation_solver(a, -c, b, n);
q=-(a*n+c)/b;
}
else if(a==0&&b!=0)
{
n=1; //其实随便什么数都行
if(c%b==0)
q=-c/b;
else { cout<<"No answer!"<<endl; exit(1); }
}
else if(a!=0&&b==0)
{
q=1; //其实随便什么数都行
if(c%a==0)
q=-c/a;
else { cout<<"No answer!"<<endl; exit(1); }
}
else
{
if(!c) { n=1; q=1; } //其实随便什么数都行
else { cout<<"No answer!"<<endl; exit(1); }
}
cout<<"m="<<m<<" "<<"p="<<p<<endl;
cout<<"n="<<n<<" "<<"q="<<q<<endl;
return 0;
}
寻开心
2003-06-05
打赏
举报
回复
要用你的方法验证前面给出的例子,不符合的不算对哦
KenShin1978
2003-06-05
打赏
举报
回复
求解过程是将 x = mk + n和 y = pk + q变形得,k=(x-n)/m,k=(y-q)/p,两式相等,所以
(x-n)/m=(y-q)/p
整理之后为px-my+(mq-pn)=0与a,b,c对应即得
boylez
2003-06-05
打赏
举报
回复
整数规划吗?
KenShin1978
2003-06-05
打赏
举报
回复
p=a
m=-b
n和q只要满足an+bq+c=0即可
寻开心
2003-06-05
打赏
举报
回复
送分的题呀。
没人要?
自己顶!
明天17点结帐。
拜托,大厂做项目
可不
简单
!
但企业中开发项目是开团打本,大家是一根绳上的蚂蚱,每个人都会影响整个项目。 我自己也在几家公司实习过,不得不说,大厂和其他公司的研发流程也有很大的区别。 因此,对于大多数同学,如果没有在大厂工作过,对...
这个中秋节礼物很特别,毛毛虫小学员编写“数独”数学逻辑小游戏献给爸妈!
我们毛毛虫的小朋友
可不
一般了,吃月饼时还不忘记编程学习。上课中间休息时,为了调剂小朋友的兴趣,我拿出纸和笔,对他们说,咱们一起来玩数独游戏。 02 数独是源自18世纪瑞士的一种数学游戏。是一种运用纸、...
结合实验详解USG6000V防火墙的相关配置(小白一定要看!!!)
这两天跟着老师学习了网络安全防御之防火墙的配置,过程中不乏遇到了许多
问题
,例如访问https://ip:8443地址却没有提示继续进入的接口,或者是无法ping通防火墙...(这里建议初学的伙伴们还是跟着实验走一遍比较好!)
第一次使用Eclipse:编写
简单
的Java小程序
通过前部分的学习,了解了Java的安装和配置,那么从现在开始,要开始自己着手编写Java程序,学习一门编程语言,学会编写的第
一个
程序一般都是写
一个
输出“hello World!”语句的小程序来表示自己开始学习这门语言。...
小萌谈Art(6)——离线编程之都是TCP惹的祸
这只小萌猴开始
可不
听小萌的话了呢!这可是小萌过五关,斩六将,搞定了不少
问题
,才能让它拜倒在小萌的石榴裙下。 就因为这只小萌猴,可是让我长了不少知识呀!起初我很
简单
的认为将软件里生成出来的代码直接拷到示...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章