一元二次方程一般式转双根式的算法
【一元二次方程一般式转双根式的算法】先说思路:
大体思路就是输入a,b,c,然后把a和c分别编成两个整数相乘的形式,比如令mn=a,pq=c,则十字相乘时当mq+np=b时,m,n,p,q四个数是正确的,把它以好看的样子输出就可以了。用一个循环分解a,再嵌一个循环分解c。
难点在于分解c的循环的取值范围应该是[-|c|,|c|]且取到0时continue跳过这次循环,因为分解c时会判断c/p是否为整数,如果是整数的话说明c可以被p整除,则q=c/p,qp=c,而0不能作为分数的分母(除数)。为什么取值范围是[-|c|,|c|]呢?当a=1,b=-5,c=-6时,我们希望输出(x-2)(x-3)=0,-2-3=6=c而此时-2,-3都是负数。
为什么a的取值范围是[1,a]呢?因为当a<0时,一般会让a、b、c分别乘上-1,而等式右边是0,乘-1后不变。所以这样a就恒为正数了。
image 再贴代码(python和C++的):
python:
def method(a, b, c): if a < 0: a, b, c = -a, -b, -c for i in range(1, a + 1): if a % i == 0: for j in range(-abs(c), abs(c) + 1): if j == 0:
continue
if c % j == 0 and i * (c / j) + (a / i) * j == b:
C++(这里注释详细一些,原理都是完全一样的):k = a / I l = c / j if i == 1: i = '' else: i = int(i) if k == 1: k = '' else: k = int(k) if j > 0: j = '+%d' % j else: j = int(j) if l > 0: i = '+%d' % l else: i = int(l) return "(%sx%s)(%sx%s)=0" % (i, j, k, l) break
a = int(input('请输入a的值:'))
b = int(input('请输入b的值:'))
c = int(input('请输入c的值:'))
print(method(a, b, c))
> #include
>
> using namespace std;
>
> int main() {
>
>int a, b, c, m, n;
>
>cout << "请输入a: ";
>
>cin >> a;
>
>cout << "请输入b: ";
>
>cin >> b;
>
>cout << "请输入c: ";
>
>cin >> c;
>
>if( a < 0 ){
>
>a = -a;
>
>b = -b;
>
>c = -c;
>
>}
>
>// i是a分解的两个整数相乘的第一个整数,m是另一个整数
>
>for( int i = 1;
i < a + 1;
i++ ){
>
>if( a % i == 0 ){
>
>// j是c分解的两个整数相乘的第一个整数,n是另一个整数
>
>// 也就是说i*j=a,m*n=c
>
>for( int j = -abs(c);
j < abs(c) + 1;
j++ ){
>
>if( j == 0 ){//这个是避免j=0,自己想想为什么要加这句话
>
>continue;
>
>}
>
>if( c % j == 0 and i * (c / j) + (a / i) * j == b ){
>
>m = a / I;
>
>n = c / j;
>
>cout << "(";
>
>if( i != 1 ){
>
>cout << i;
>
>}
>
>cout << "x";
>
>if( j > 0 ){
>
>cout << "+";
>
>}
>
>cout << j;
>
>cout << ")(";
>
>if( m != 1 ){
>
>cout << m;
>
>}
>
>cout << "x";
>
>if( n > 0 ){
>
>cout << "+";
>
>}
>
>cout << n;
>
>cout << ")=0" << endl;
>
>break;
>
>}
>
>}
>
>}
>
>}
>
>return 0;
>
> }
最后放几张算法运行时截的图:
文章图片
image
文章图片
image
文章图片
image
推荐阅读
- 高大上还是路边摊
- 读书这件事
- 一般模型化关系——从模型是什么到如何起作用的基本答案
- django2.2|django2.2 一般项目步骤(初步)
- 一般现在时
- locust——python性能测试模块
- 集装箱活动房一般是多大的规格
- 椭圆参数的推导过程
- 纹绣一般多久能学出来(学纹绣多久能学会)
- 《于坚诗集》(说海子只是一般诗人,他的诗就真的那么好吗())