c语言正整数幂尾数循环问题(同余定理)

众所周知, 2 的正整数次幂最后一位数总是不断的在重复 2 , 4 , 8 , 6 , 2 , 4 , 8 , 6 … 2 , 4 , 8 , 6 , 2 , 4 , 8 , 6 … 我们说 2 的正整数次幂最后一位的循环长度是 4(实际上 4 的倍数都可以说是循环长度,但我们只考虑最小的循环长度)

这时乐乐的问题就出来了:是不是只有最后一位才有这样的循环呢?对于一个整数 n 的正整数次幂来说,它的后 L (L=1,2)位是否会发生循环?如果循环的话,循环长度是多少呢?

注意:

如果 n 的某个正整数次幂的位数不足 L,那么不足的高位看做是 0。

如果由后 L 位组成的序列中存在第 i 项等于第 i+k 项,则称这个整数 n 会发生循环,循环长度是 k ;例如:一个序列 2 4 8 6 2 ,存在循环,循环长度是 4 。

如果整数 n 的正整数次幂大于 2147483647 都没有出现循环,则这个整数 n 不会发生循环。

输入格式

共一行,包含两个整数 n 和 L。 n 和 L 之间用一个空格隔开.

输出格式

共两行,第一行一个整数 k ,表示循环长度。如果循环不存在,输出 −1。

第二行 k 个整数,之间用空格隔开,表示一组循环。

输入输出样例

输入 10 2

输出

1

00

输入11 2

输出

-1

输入2 1

输出

4

2 4 8 6

#include 
#include 
int find(int n)
{
	int num=0;
	long long r=n;
	 while(r

尚不明白的是为啥输入10 2

就会输出

1

00

你可能感兴趣的:(算法)