hdu1098 - Ignatius's puzzle 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098
数学水
题目大意:给定一个函数f(x)=5*x^13+13*x^5+k*a*x其中k和a都是非负整数,输入k,看是否有合适的a,使得f(x)%65==0若有,输出a,否则输出no。
题目分析:函数可以分为两个部分,1st 5*x^13+13*x^5 , 2nd k*a*x 。高次部分虽然麻烦,但可以找规律
(5*x^13+13*x^5)%65会出现循环,很好证明,我就不写了。写出循环节可以看出,循环节长度是65,而且是等差数列,步长为18。然后,保证了x=1时也即是(18+k*a)%65==0成立,那么对于剩下的所有x,f(x)%65都成立。
有了以上的规律,就可以列出最终的式子(k*a+18)%65==0
以下是程序:
#include <stdio.h>
int main()
{
int k,a;
while(scanf("%d",&k)!=EOF)
{
for(a=1;a<66;a++)
{
if((k*a+18)%65==0)
{
printf("%d\n",a);
goto end;
}
}
printf("no\n");
end:;
}
return 0;
}
PS:做这道题有一个很大的收获,那就是学会了goto。