標籤:http io ar for sp div c amp ef
題目連結
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>
int main(void){ int k,i; while(scanf("%d",&k)==1) { for(i=1;i<=66;i++) { if((18+k*i)%65==0) { printf("%d\n",i); break; } } if(i>66) printf("no\n"); } return 0;}
HDU-1098-Ignatius's puzzle