| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
那位大牛给看看,不知道为什么总是wa#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
__int64 coffi[120],f1[120],f2[120],a0;
__int64 ans[120];
__int64 fact[200000];
int count,n,t,fnum;
int cmp(const void *a,const void *b)
{
__int64 a1=(*(__int64*)a);
__int64 b1=(*(__int64*)b);
if(a1>b1)
return 1;
if(a1<b1)
return -1;
return 0;
}
void div(__int64 num)
{
__int64 r[2]={1,num};
int i;
while(t>=1)
{
for(i=1;i<=t;i++)
{
f2[i-1]=f1[i-1]/r[0];
f1[i]=f1[i]-f2[i-1]*r[1];
}
if(f1[t]!=0)
break;
for(i=0;i<t;i++)
f1[i]=f2[i];
ans[count++]=-num;
t--;
}
}
int main()
{
int i,tt,j;
__int64 aa,ii;
// freopen("1.in","r",stdin);
while(scanf("%d",&n)!=EOF)
{
coffi[0]=1;
count=0;
for(i=1;i<=n;i++)
scanf("%I64d",coffi+i);
i=n;
while(!coffi[i])
{
i--;
ans[count++]=0;
}
if(i==0)
{
goto l1;
}
n=i;
a0=coffi[n];
if(a0<0)
{
a0=-a0;
for(i=0;i<=n;i++)
coffi[i]=-coffi[i];
}
tt=(int)sqrt((double)a0);
for(ii=1,i=1,j=0;i<=tt+1;i++,ii++)
{
if(a0%i==0)
{
aa=a0/ii;
if(aa!=ii)
{
fact[j++]=ii;
fact[j++]=aa;
}
else
fact[j++]=ii;
}
}
fnum=j;
qsort(fact,fnum,sizeof(fact[0]),cmp);
for(i=1,j=1;i<fnum;i++)
{
if(fact[i]==fact[i-1])
continue;
fact[j++]=fact[i];
}
fnum=j;
for(i=0;i<fnum;i++)
{
for(j=0;j<=n;j++)
f1[j]=coffi[j];
t=n;
div(fact[i]);
for(j=0;j<=n;j++)
f1[j]=coffi[j];
t=n;
div(-fact[i]);
}
qsort(ans,count,sizeof(ans[0]),cmp);
l1:
printf("%d\n",count);
for(i=0;i<count;i++)
printf("%I64d\n",ans[i]);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator