循环节
时间限制:c/c++语言1000ms;其他语言3000ms
内存限制:c/c++语言65536KB;其他语言589824KB
题目描述:
对于x^k%c,x的k次方模c,如果x和c互质,那么随着k的增加会出现一个循环节。
比如x=2,c=15
(2^0)%15=1;(2^1)%15=2;(2^2)%15=4;(2^3)%15=8;(2^4)%15=1;(2^5)%15=2…
求得循环节为4。
样例输入
2 15
样例输出
4
代码
import java.util.Scanner;
import java.util.List;
import java.util.LinkedList;
import java.util.Iterator;
class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int x = scan.nextInt();
int c = scan.nextInt();
int k = 1;
List<Double> list = new LinkedList<Double>();
while(true) {
double temp = Math.pow(x, k) % c;
if(temp != 1.0) {
list.add(temp);
k++;
} else {
int j = 1;
Iterator it = list.iterator();
while(it.hasNext()) {
Object obj = it.next();
Double d = (Double)obj;
if(Math.pow(x, k+j) % c == d)
j++;
else {
list.add(temp);
k++;
break;
}
}
if(j == k) {
System.out.println(k);
break;
}
}
}
}
}