NYOJ 52 無聊的小明 模擬

2021-06-29 01:31:04 字數 1309 閱讀 6611

時間限制:

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

輸出每組測試資料輸出包括一行,這一行只包含乙個整數,表示迴圈長度。如果迴圈不存在,輸出-1。

樣例輸入

1

32 2

樣例輸出

4

這道題就是模擬乘法,需要用到大數相乘和結構體的知識。最多不超過1e4;

**:#include #include #include #include using namespace std;

const int m =1e4;

struct node;

int main()*/

node a;

memset(a.s, 0, sizeof(a.s));

int i = 1;

string st;

while(m)

for(int i = 1; i <= k; ++ i)

st += (a.s[i]+'0');

// cout << st;

int res = 0;

node b = a, c;

//memset(c.s, 0, sizeof(c.s));

string str;

while(res < m)

/*str += (c.s[i]+'0');

cout << str;*/

}for(int i = 1; i <= k; ++ i) str += (c.s[i]+'0');

++res;

if(st == str) break;

str.clear();

b = c;

} if(res == m) cout << -1 <

nyoj 52 無聊的小明 模擬, SET

記憶體限制 64mb 時間限制 3000ms special judge no accepted 1 submit 3 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到乙個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,...

nyoj 52 無聊的小明 模擬, SET

記憶體限制 64mb 時間限制 3000ms special judge no accepted 1 submit 3 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到乙個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,...

nyoj 52 無聊的小明 Floyd判圈法)

這幾天無意中看到的floyd判圈法實在是好用,用於判斷在於給定規則下是否會出現迴圈,這題是判斷是否是按週期出現的,如果還不了解差別看下面的例子 10 3 分別是 10 100 0 0 0 這種就不是週期出現的。再來說說這種演算法吧,在時間複雜度上是差不多的,但是亮點在於空間複雜度o 1 怎麼實現的呢...