NOIPTGA组T1方程式 多项式除法

该博客介绍了如何使用多项式除法解决求解n次方程根的问题,特别是处理重根的情况。通过将方程分解为(x-x1)(x-x2)...的形式,并逐个除以(x-1), (x-2)等,直到只剩一次项和常数,从而找到所有根,包括重根。博主分享了学习和实现多项式除法的过程,以及解决这个问题的代码实现。" 131075846,18852486,ESP8266与MQ7:单片机实现一氧化碳检测,"['单片机', '嵌入式硬件', '传感器技术', '物联网', '空气质量监测']
摘要由CSDN通过智能技术生成

题意:给你一个n次方程,让你求他的所有根(重根也要输出)。
其实我一开始是蒙蔽的,不知道啥是重根,等我搞清楚什么是重根的时候别人已经开始打了。。
比如说(x-1)(x-1)(x-2)=0,这个方程的根是1 1 2
所以我们知道,如果一个n次方程能分解为(x-x1)(x-x2)(x-x3)….那么这个方程就可以解决了。
由于题目中规定ans<=20且都为整数,所以我们一个一个除,用多项式除法,依次除(x-1),(x-2)….但是因为有重根,每次都要除到只有一次项和常数,除了多少次就输出多少个。
代码(多项式除法现学现卖,打了超长时间,不然T3就有时间打了。。)

 var
        k,p,n,m:int64;
        i,j:longint;
        a,b:Array[0..10]of int64;
function chu(k:int64):boolean;
var
        i:longint;
begin
        for i:=0 to n do b[i]:=a[i];
        for i:=n downto 1 do
        begin
                //writeln(i-1);
                b[i-1]:=b[i-1]-(-k*b[i]);
        end;
        if b[0]=0 then exit(true)
                else exit(false);
end;
begin
        assign(input,'equation.in');
        assign(output,'equation.out');
        reset(input);
        rewrite(output);
        readln(n);
        for i:=0 to n do read(a[i]);
        m:=n;
        k:=1;
       i:=0;
       while i<m do
        begin
                if chu(k) then//多项式除法
                begin
                        for j:=0 to n do b[j]:=a[j];
                        dec(n);
                        for j:=n downto 0 do
                        begin
                                a[j]:=b[j+1];
                                b[j]:=b[j]-(-k*b[j+1]);
                        end;
                        write(k,' ');
                end
                else
                begin
                        inc(k);
                        dec(i);
                end;
                inc(i);
        end;

end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值