Hdu 1098 - Ignatius's puzzle

数学归纳法

 

 

题目给出一个方程式:f(x) = 5*x^13 + 13*x^5 + k*a*x,要求输入一个k(0<k<=10000),能否得出一个最小的a使得65能被f(x)整除。

要证明 f(n) ,即证明f(n+1)

用二项式分解得出   5*(n+1)^13 + 13*(n+1)^5一定能被65整除

用f(x+1)-f(x),会发现,只有18+ka不能确定是否能%65==0;

又因(18+ka)%65=(18%65+(k%65)*(a%65))%65,由此可以确定0<a<=65;即将65做为一个周期。

 

 

AC代码:

#include <stdio.h>
#include <math.h>
int main()
{
    int k,a,i;
    while(scanf("%d",&k)!=EOF)
    {
        a = 0;
        for(i=1;i<=65;i++)
        {
            if((k*i+18)%65 == 0)
            {
                a = i;
                break;
            }
        }
        if(a == 0) printf("no\n");
        else printf("%d\n",a);
    }
    return 0;
}


 

 

 

 

 

 

你可能感兴趣的:(Hdu 1098 - Ignatius's puzzle)