原题链接:click here
本题一开始做脑子里什么五花八门的东西都出来了,一句话没头绪。后来静下心来想一想,貌似高中的多项式整除某个数,求参数。于是乎联想到了数学归纳法。
已知:f(x)=5*x^13+13*x^5+k*a*x,当给定k的值后,多项式中只有一个参数a了。对于任意的x都有65|f(x),求满足条件的a的最小值。如果找不到则输出no.
数学归纳法:
(1):当x=t时满足65|f(t).即:5*t^13+13*t^5+k*a*t=65M; (其中M是非负整数)
(2):当x=t+1时,f(t+1)=5*(t+1)^13+13*(t+1)^5+k*a*(t+1)
=5*[c(13,0)*t^13+c(13,1)*t^12+……+c(13,12)*t+c(13,13)]+13*[c(5,0)*t^5+c(5,1)*t^4+……+c(5,4)*t+c(5,5)]+k*a*t+k*a
=5*[c(13,1)*t^12)+……+c(13,12)*t]+13*[c(5,1)*t^4+……+c(5,4)*t]+(5*t^13+13*t^5+k*a*t)+(5+13+k*a)
=5*[c(13,1)*t^12)+……+c(13,12)*t]+13*[c(5,1)*t^4+……+c(5,4)*t]+f(t)+(18+k*a)
5*[c(13,1)*t^12)+……+c(13,12)*t]式中的每个组合系数都可以提出个13出来,所以可以整除65;
13*[c(5,1)*t^4+……+c(5,4)*t]式中每个组合系数都可以提出个5来,所以可以整除65;
由(1)式知f(t)可以整除65,
所以f(t+1)要整除65则常数项(18+k*a)必须整除65,即:(18+k*a)%65==0;
由求余的性质可知,(k*a)%65==47;即:(k%65)*(a%65)==47 ----------(*);
由(*)式可知,对于给定的k来说,k%65是一个定值,而a%65取余的结果为从0~64,每65次一循环,如果a在0~64内对65取余的结果与k%65的乘积不等于47,则找不到满足题意的a值。
代码如下:
#include<stdio.h>int main()
{
int k,a;
while(scanf("%d",&k)!=EOF)
{
for(a=0;a<=64;a++)
{
if((k*a)%65==47)//数学归纳法和二项式展开,得到常数项必是65的倍数,于是得到此式
{
printf("%d\n",a);
break;
}
}
if(a==65)
printf("no\n");
}
return 0;
}