1. 程式人生 > >【ACM】無聊的小明

【ACM】無聊的小明

表示 問題 name 小明 include == problem 內存 return

無聊的小明

時間限制: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

 
#include <iostream>
using namespace std;

int main(){

    int m;
    cin>>m;
    int n,k;
    
while (m--) { cin>>n>>k; int d = 10; for (int i = 1; i < k; i++) { d*=10; } long long b = n%d; long long temp = b; int z; int ans = -1; for (z = 0 ; z < d ;z++) { temp = temp*n%d;
if (b==temp) { ans = z+1; break; } } cout<<ans<<endl; } return 0; }

【ACM】無聊的小明