【JZOJ4831】【NOIP2016提高A组集训第3场10.31】方程式

题目描述

这里写图片描述

数据范围

这里写图片描述

解法

枚举根之后,使用大除法。

代码

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<algorithm>
#define ll long long
using namespace std;
const char* fin="equation.in";
const char* fout="equation.out";
const ll inf=0x7fffffff;
const ll maxn=23,maxm=1007,maxa=20;
ll n,i,j,k;
ll qpower(ll a,ll b){
    ll c=1;
    while (b){
        if (b&1) c=c*a;
        a=a*a;
        b>>=1;
    }
    return c;
}
struct eq{
    ll data[maxn],num;
    bool count(ll v){
        ll i,j,k=0;
        for (i=0;i<=num;i++){
            k+=data[i]*qpower(v,i);
        }
        return k==0;
    }
    void operator /=(const ll &v){
        ll i,j,k;
        for (i=num;i;i--){
            data[i-1]-=v*data[i];
        }
        for (i=0;i<num;i++) data[i]=data[i+1];
        num--;
    }
}a;
int main(){
    freopen(fin,"r",stdin);
    freopen(fout,"w",stdout);
    scanf("%lld",&n);
    a.num=n;
    for (i=0;i<=n;i++) scanf("%lld",&a.data[i]);
    for (i=1;i<=maxa;i++){
        while (a.count(i)) {
            printf("%lld ",i);
            a/=-i;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/hiweibolu/p/6714860.html