首页 > 代码库 > HDU 4569 Special equations(数学推论)

HDU 4569 Special equations(数学推论)

题目

 

 

 

//想不出来,看了解题报告/*题意:给你一个最高幂为4的一元多项式,让你求出一个x使其结果模p*p为0.题解:f(x)%(p*p)=0那么一定有f(x)%p=0,f(x)%p=0那么一定有f(x+p)%p=0。所以我们可以开始从0到p枚举x,当f(x)%p=0,然后再从x到p*p枚举,不过每次都是+p,找到了输出即可,没有的话No solution!*/#include<stdio.h>int main(){    int t,n;    __int64 a[5],p;    scanf("%d",&t);    for(int id=1;id<=t;id++)    {        scanf("%d",&n);        for(int i=n;i>=0;i--)        {            scanf("%I64d",&a[i]);        }        scanf("%I64d",&p);        printf("Case #%d: ",id);        __int64 ee=p*p;        int flag=0;        for(__int64 x=0;x<=p;x++)        {            __int64 ss=0;             __int64 xx=1;                for(int i=0;i<=n;i++)            {                ss+=(a[i]*xx);                xx*=x;            }            if(ss%p==0)            {                for(__int64 y=x;y<=ee;y+=p)                {                    __int64 sss=0;                     __int64 xxx=1;                        for(int ii=0;ii<=n;ii++)                    {                        sss+=(a[ii]*xxx);                        xxx*=y;                    }                    if(sss%ee==0)                    {                        flag=1;                        printf("%I64d\n",y);                        break;                    }                }            }            if(flag==1)break;        }        if(flag==0)            printf("No solution!\n");        }        return 0;    }
View Code