用java编写一个函数来查找正整数N的二进制周期

用java编写一个函数来查找正整数N的二进制周期,java,binary,bit-manipulation,Java,Binary,Bit Manipulation,给出了由Q个字符组成的非空零索引字符串S。这个字符串的周期是最小的 正整数p,使得: p≤ Q/2和 对于0,S[K]=S[K+P]≤ K0){ d[l]=n%2; n/=2; l++; } 对于(int p=1;p0){ d[l]=n%2; n/=2; l++; } 对于(int p=1;p

给出了由Q个字符组成的非空零索引字符串S。这个字符串的周期是最小的

正整数p,使得:

p≤ Q/2和 对于0,S[K]=S[K+P]≤ K 例如,7是“百事可乐”的时期。 如果M是N的二进制表示的周期,则正整数M是正整数N的二进制周期

例如,1651具有二进制表示形式“110011100111”。因此,其二进制周期为5。另一方面,102没有二进制周期,因为其二进制表示为“1100110”,并且没有周期

考虑上述场景&用Java编写一个函数,该函数将接受整数N作为参数。给定一个正整数N,函数返回二进制周期N。函数应返回−如果N没有二进制周期,则为1

下面我也介绍了我为之工作的解决方案&I想知道是否还有其他更好的方法来解决它?
公共类BinaryPeriod{
public class BinaryPeriod {

    public static void main(String[] args) {
        System.out.println("\nEx1: " + getBinaryPeriodForInt(102));
        System.out.println("\nEx2: " + getBinaryPeriodForInt(1651));
    }

    static int getBinaryPeriodForInt(int n) {
        int[] d = new int[30];
        int l = 0, res = -1;
        while (n > 0) {
            d[l] = n % 2;
            n /= 2;
            l++;
        }

        for (int p = 1; p < l; p++) {
            if (p <= l / 2) {
                boolean ok = true;
                for (int i = 0; i < l - p; i++) {
                    if (d[i] != d[i + p]) {
                        ok = false;
                        break;
                    }
                }
                if (ok) {
                    res = p;
                }
            }
        }

        return res;
    }
}
公共静态void main(字符串[]args){ System.out.println(“\nEx1:+getBinaryPeriodForInt(102)); System.out.println(“\nEx2:+getBinaryPeriodForInt(1651)); } 静态int getBinaryPeriodForInt(int n){ int[]d=新的int[30]; int l=0,res=-1; 而(n>0){ d[l]=n%2; n/=2; l++; } 对于(int p=1;ppublic类二进制周期{ 公共静态void main(字符串[]args){ System.out.println(“\nEx1:+getBinaryPeriodForInt(102)); System.out.println(“\nEx2:+getBinaryPeriodForInt(1651)); } 静态int getBinaryPeriodForInt(int n){ int[]d=新的int[30]; int l=0,res=-1; 而(n>0){ d[l]=n%2; n/=2; l++; } 对于(int p=1;p如果(p)您的代码中有bug。由于分区应该是长度的一半,因此在外部for循环中,它应该是:“p