首页 > 代码库 > HDU-1098-Ignatius's puzzle
HDU-1098-Ignatius's puzzle
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1098
题目的关键是函数式f(x)=5*x^13+13*x^5+k*a*x;事实上,由于x取任何值都需要能被65整除.那么用数学归纳法.只需找到f(1)成立的a,并在假设f(x)成立的基础上,证明f(x+1)也成立.那么把f(x+1)展开,得到5*( ( 13 0 )x^13 + (13 1 ) x^12 ...... .....+(13 13) x^0)+13*( ( 5 0 )x^5+(5 1 )x^4......其实就是二项式展开,这里就省略了 ......+ ( 5 5 )x^0 )+k*a*x+k*a;——————这里的( n m)表示组合数,相信学过2项式定理的朋友都能看明白.然后提取出5*x^13+13*x^5+k*a*x则f(x+1 ) = f (x) + 5*( (13 1 ) x^12 ...... .....+(13 13) x^0 )+ 13*( (5 1 )x^4+...........+ ( 5 5 )x^0 )+k*a;很容易证明,除了5*(13 13) x^0 、13*( 5 5 )x^0 和k*a三项以外,其余各项都能被65整除.那么也只要求出18+k*a能被65整除就可以了.而f(1)也正好等于18+k*a所以,只要找到a,使得18+k*a能被65整除,也就解决了这个题目.第一点:当k%65=0时,18+k*a是永远除不尽65的,第二点;k%65!=0 时,那么我们就从1开始找a,不断地尝试18+k*a是否能除尽65,找到即止。当a==66时,也就是已经找了一个周期了,在找下去也找不到适当的a了。此题属于纸老虎型^_^(如果没有想到这里就要动用暴力........)。
#include<stdio.h>
HDU-1098-Ignatius's puzzle