【问题标题】:Check every permutation of a number for primality检查一个数字的每个排列的素数
【发布时间】:2026-02-06 16:15:01
【问题描述】:

我正在解决这个问题 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]);
        }

}

【问题讨论】:

  • 尝试打印wxyz。您会在定义中发现一些错误。

标签: java permutation primes


【解决方案1】:

你计算 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;

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

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

【讨论】:

    最近更新 更多