時間限制:
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。
樣例輸入
132 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 怎麼實現的呢...