hdu 1098 Ignatius's puzzle(数学归纳法证题)

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

题意就是,输入k,然后求对于任意的x,使f(x)能被65整除时,最小的a;

数学归纳法证明:

f(x)=5*x^13+13*x^5+k*a*x

第一步:f(0)=0;成立:

第二步:假设f(x)能被65整除,则有5*x^13+13*x^5+k*a*x能被65整出;

第三步:则f(x+1)=5*(x+1)^13+13*(x+1)^5+k*a*(x+1);

根据二项式定理分析题目:

f(x+1)=5*(c(13,0)+c(13,1)*x+c(13,2)*x^2+.......+c(13,13)*x^13)+13*(c(5,0)+c(5,1)*x+......+c(5,5)*x^5)+k*a*(x+1)

  =f(x)+5*(c(13,0)+c(13,1)*x+c(13,2)*x^2+.......+c(13,12)*x^12)+13*(c(5,0)+c(5,1)*x+......+c(5,4)*x^4)+k*a;

  =f(x)+5+5*c(13,1)*x+5*c(13,2)*x^2+......+5*c(13,12)*x^12+13+13*c(5,1)*x+.....+k*a;

所以只要13+5+k*a能被65整除即可。。。(18+k*a)%65==0;====>k*a%65==47;k是定值,只要将a从0到64枚举一遍即可。代码如下:

View Code
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
int k,i,flag;
while(scanf("%d",&k)!=EOF){
flag=0;
for(i=0;i<=64;i++){
if((k*i)%65==47) {
printf("%d\n",i);
flag=1;
break;
}
}
if(!flag) printf("no\n");
}
return 0;
}




你可能感兴趣的:(HDU)