nyoj52 正整數次冪的後K位
阿新 • • 發佈:2019-02-01
無聊的小明
時間限制:3000 ms | 記憶體限制:65535 KB難度:3- 描述
- 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到一個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。
眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,2,4,8,6……我們說2的正整數次冪最後一位的迴圈長度是4(實際上4的倍數都可以說是迴圈長度,但我們只考慮最小的迴圈長度)。類似的,其餘的數字的正整數次冪最後一位數也有類似的迴圈現象。
這時小明的問題就出來了:是不是隻有最後一位才有這樣的迴圈呢?對於一個整數n的正整數次冪來說,它的後k位是否會發生迴圈?如果迴圈的話,迴圈長度是多少呢?
注意:
1.如果n的某個正整數次冪的位數不足k,那麼不足的高位看做是0。
2.如果迴圈長度是L,那麼說明對於任意的正整數a,n的a次冪和a + L次冪的最後k位都相同。
- 輸入
- 第一行輸入一個整數N(0<n<10);接下來每組測試資料輸入只有一行,包含兩個整數n(1 <= n <100000)和k(1 <= k <= 5),n和k之間用一個空格隔開,表示要求n的正整數次冪的最後k位的迴圈長度。
- 輸出
- 每組測試資料輸出包括一行,這一行只包含一個整數,表示迴圈長度。如果迴圈不存在,輸出-1。
- 樣例輸入
1 32 2
- 樣例輸出
4
//解題思路:同餘定理,暴力尋找計數,範圍小於等於 10^k,首次找到與 n % 10^k 相等即為迴圈,輸出計數,否則-1 #include <stdio.h> int main() { int a[6]={0,10,100,1000,10000,100000}; int num,n,k; long long y,record; scanf("%d",&num); while(num--) { int count=0,i; scanf("%d %d",&n,&k); record = n%a[k]; y = record; for(i=2;i<=a[k];i++)//在10^k內必有迴圈,否則為不迴圈 { count++; y=y*n%a[k];//同餘定理,取模後去相乘不會影響 if(record==y)//找到首個相同的尾數即為迴圈 break; } if(i-1==a[k]) printf("-1\n"); else printf("%d\n",count); } return 0; }