NC16651. [NOIP2005]循环
描述
乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天,他突然对数的正整数次幂产生了兴趣。
| 循环 | 循环长度 |
2 | 2、4、8、6 | 4 |
3 | 3、9、7、1 | 4 |
4 | 4、6 | 2 |
5 | 5 | 1 |
6 | 6 | 1 |
7 | 7、9、3、1 | 4 |
8 | 8、4、2、6 | 4 |
9 | 9、1 | 2 |
这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数n的正整数次幂来说,它的后k位是否会发生循环?如果循环的话,循环长度是多少呢?
注意:
1. 如果n的某个正整数次幂的位数不足k,那么不足的高位看做是0。
2. 如果循环长度是L,那么说明对于任意的正整数a,n的a次幂和a + L次幂的最后k位都相同。
输入描述
只有一行,包含两个整数n(1<=n<10100)和k(1<=k<=100),n和k之间用一个空格隔开,表示要求n的正整数次幂的最后k位的循环长度。
输出描述
包括一行,这一行只包含一个整数,表示循环长度。如果循环不存在,输出-1。
示例1
输入:
32 2
输出:
4
Python3 解法, 执行用时: 42ms, 内存消耗: 4624K, 提交时间: 2022-06-07 20:34:47
data = input().split(' ') n,k = int(data[0]),int(data[1]) u = 10**k n = n%u c = 1 f = True res = 1 for i in range(k): t= res a = n c *=10 j = 0 while n*a%c != a%c: n = n*a%u res += t j += 1 if j>10: print('-1') f = False break if not f: break if f: print(res)