http://acm.hdu.edu.cn/showproblem.php?pid=1098

假设x=m时,65|f(m),即65|5*m^13+13*m^5+k*a*m

计算f(m+1)=(5*m^13+13*m^5+k*a*m)+65*(m^12+6*m^11+22*m^10+55*m^9+99*m^8+132*m^7+132*m^6+99*m^5+56*m^4+24*m^3+8*m^2+2*m)+(18+k*a)

式子的前两部分显然能被65整除,此时如果65|(18+k*a),那么65|f(m+1)。

同时观察到f(1)=18+k*a,所以如果65|f(1),则65|f(m+1),此时对于所有x>1,65|f(x)均成立

这样问题就转化到是否存在a使得65|(18+k*a),我们从1-64进行枚举,先找到满足条件的a必定是最小的,符合题目要求,均不成立则输出"no"

#include <iostream>
using namespace std ;
int main()
{
    int k ;
    while(~scanf("%d",&k))
    {
        int a=0 ;
        for(int i=1 ;i<65 ;i++)
        {
            if((18+k*i)%65==0)
            {
                a=i ;
                break ;
            }
        }
        if(!a)
            puts("no") ;
        else
            printf("%d\n",a) ;
    }
    return 0 ;
}
View Code