nyoj 88 漢諾塔(一)【快速冪】

來源:互聯網
上載者:User

標籤:

漢諾塔(一)時間限制:1000 ms  |  記憶體限制:65535 KB難度:3 
描述

在印度,有這麼一個古老的傳說:在世界中心貝拿勒斯(在印度北部)的聖廟裡,一塊黃銅板上插著三根寶石針。印度教的主神梵天在創造世界的時候,在其中一根針上從下到上地穿好了由大到小的64片金片,這就是所謂的漢諾塔。不論白天黑夜,總有一個僧侶在按照下面的法則移動這些金片:一次只移動一片,不管在哪根針上,小片必須在大片上面。僧侶們預言,當所有的金片都從梵天穿好的那根針上移到另外一根針上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸於盡。

現在請你計算出起始有m個金片的漢諾塔金片全部移動到另外一個針上時需要移動的最少步數是多少?(由於結果太大,現在只要求你算出結果的十進位位最後六位)

 
輸入
第一行是一個整數N表示測試資料的組數(0<N<20)
每組測試資料的第一行是一個整數m,表示起始時金片的個數。(0<m<1000000000)
輸出
輸出把金片起始針上全部移動到另外一個針上需要移動的最少步數的十進位表示的最後六位。
範例輸入
211000
範例輸出
169375

題解:移動步數等於2^N-1
#include<stdio.h>#include<string.h>long long f(long long a,int b,int c){    long long ans=1;    a=a%c;    while(b)    {    if(b&1)        ans=(ans*a)%c;    b/=2;       a=(a*a)%c;    }    return ans;}int main(){int n,m,j,i,t;scanf("%d",&t);while(t--){scanf("%d",&n);printf("%lld\n",f(2,n,1000000)-1);}return 0;}

  

nyoj 88 漢諾塔(一)【快速冪】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.