HDU-1098-Ignatius's puzzle

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.