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

 

posted @ 2014-07-09 21:17  laiba2004  Views(167)  Comments(0Edit  收藏  举报