检查数字的每个排列是否具有素数

时间:2016-02-03 22:58:19

标签: java permutation primes

我正在处理这个问题https://projecteuler.net/problem=49。 这是检查传递给它的数字(4位数)的每个排列的函数,并检查它们的素数,如果有超过2(即3)打印数字。

我得到的输出是一个永无止境的数字序列。我做错了什么?

P.s-非常确定它与重复的数字有关,无法弄清楚如何解决它。

void checkperm(int a) {
    int w, x, y, z = 0;
    int count = 0;
    w = a % 10;
    x = (a % 100 - w) / 10;
    y = (a % 1000 - (10 * x + w) / 100);
    z = a - (y * 100 + x * 10 + w)/1000;
    System.out.println(w+x+y+z);   /*test*/
    int[] data;
    data = new int[] { w, x, y, z };
    int[] num = new int[100];
    for (int m = 0; m < 4; m++) {
        for (int n = 0; n < 4; n++) {
            for (int o = 0; o < 4; o++) {
                for (int p = 0; p < 4; p++) {
                    if (true) {
                        int gnaw = 1000 * data[m] + 100 * data[n] + 10 * data[o] + data[p];
                        if (checkprime(gnaw)) {
                            num[count] = gnaw;
                            count++;
                        }
                    }
                }
            }
        }
    }
    if (count > 2)
        for (int h = 0; h < 4; h++) {
            System.out.println(num[h]);
        }

}

1 个答案:

答案 0 :(得分:0)

你计算w,x,y和z的方式是错误的。

应该是什么 -

int temp = a;

w = temp%10;

temp = temp/10;
x = temp%10;

temp = temp/10;
y = temp%10;

temp = temp/10;
z = temp;

这只是代码中的逻辑纠正。理想情况下,所有这些都应该在循环中发生。

这有助于假设您的其余代码在逻辑上是正确的(我还没有通过)。