解方程:f(x)%m=0,f(x) = a nx n +...+ a 1x +a 0。
给出m=p*p,f(x)的系数a n to a 0,求满足的x的值。
由于n最大是4,可以暴力判断,先找到f(x)%p=0的x,再从这个x开始找f(x‘)%m=0的x’。(1~m中一定有满足的x,否则就是no solution)
#include<cstdio>
__int64 a[6],n;
__int64 deal(__int64 x)
{
if(n==4)return a[4]*x*x*x*x+a[3]*x*x*x+a[2]*x*x+a[1]*x+a[0];
if(n==3)return a[3]*x*x*x+a[2]*x*x+a[1]*x+a[0];
if(n==2)return a[2]*x*x+a[1]*x+a[0];
if(n==1)return a[1]*x+a[0];
}
int main()
{
__int64 p,t,tt,i,j;
scanf("%I64d",&t);
tt=1;
while(tt<=t)
{
printf("Case #%I64d: ",tt++);
scanf("%I64d",&n);
for(i=n; i>=0; i--)
scanf("%I64d",&a[i]);
scanf("%I64d",&p);
__int64 ans=0;
for(i=0; i<p; i++)
{
if(deal(i)%p==0)
for(j=i; j<p*p; j+=p)
if(deal(j)%(p*p)==0)
{
ans=j;
break;
}
if(ans)break;
}
if(ans)printf("%I64d\n",ans);
else printf("No solution!\n");
}
}