版权声明:博客内容为本人自己所写,请勿转载。 https://blog.csdn.net/weixin_42805929/article/details/82668437
循环节
/**
* 循环节: a = (x ^ k) % c
* 当 x = 2,c = 15时
* k = 0, a = 1;
* k = 1, a = 2;
* k = 2, a = 4;
* k = 3, a = 8;
* k = 4, a = 1;
* 所以循环节的长度为 4
*
* 要求:c > 1
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int c = sc.nextInt();
int ci = circle(x, c);
System.out.println(ci);
}
public static int circle(int x, int c) {
int count = 0;
ArrayList<Integer> list = new ArrayList<>();
int s = x;
int a = 0;
boolean flag = true;
if (c > 1) {
if (x == 1) {
count = 1;
} else {
for (int i = x; i <= Math.sqrt(c); i++) {
if (c % x == 0) {
flag = false;
}
}
if (flag == true) {
for (int i = 0; i <= count; i++) {
if (count == 0) {
s = 1;
a = s % c;
if (!list.contains(a)) {
list.add(a);
count++;
}
} else {
s = s * x;
a = s % c;
if (!list.contains(a) && s < c) {
list.add(a);
count++;
}
}
}
}
}
}
return count;
}
}