题目描述
数据范围
解法
枚举根之后,使用大除法。
代码
#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;
}