【问题标题】:Check whether a number contains a pair of combinations which are both primes检查一个数字是否包含一对都是素数的组合
【发布时间】:2012-05-11 21:16:39
【问题描述】:

我正在尝试创建一个布尔递归函数,它只接受 1 个参数并且不充当另一个函数的包装器,它检查一个数字是否包含一对都是素数的组合。

例如,8379 的可能组合是:

8 379  
83 79  
837 9

我已经设法使用包装函数创建了该函数,但如果没有包装我似乎无法做到这一点。

我目前拥有的是:

func(num):  
num is prime -> return true
else -> call func(num / 10, num % 10).

fun(num1, num2):  
num1 and num2 are primes -> return true  
num1 < 10 -> return false  
return func(num1 / 10, concat(num1 % 10, num2))

【问题讨论】:

  • 包装器 = 包装器函数。是的,这是家庭作业。我不是在寻找代码,只是在寻找通用算法。
  • 如果您向我们展示您已经拥有的代码,或者至少是等效的伪代码(以保持简短),可能会有所帮助。
  • 您是否尝试过简单地将函数代码复制到“包装函数”中?如果这是要求...
  • 嗯,函数必须只接受 1 个参数,而我的解决方案使用 2 个参数。我似乎无法找到一种仅使用 1 个参数使其工作的方法。
  • 如果数字本身是素数,该函数也应该返回true? (不是一对数字)

标签: c recursion primes


【解决方案1】:

假设您定义了一个 isPrime 函数,那么您可以像这样定义您的函数:

bool f(int x) {
    int right = x % 10, left = x / 10, iter = 1;

    while (left) {
        if (isPrime(left) && isPrime(right)) return true;

        right = (pow(10, iter++) * (left % 10)) + right;
        left = left / 10;
    }

    return false;
}

【讨论】:

  • 函数必须是递归的,这就是为什么它只接受一个参数对我来说似乎不合逻辑。
  • 您确定 8379 的可能组合不包括 (3, 7) 对吗?
【解决方案2】:

用 Java 编写。

我不太确定您是要检查数字的“多个”组合还是一个。

这是我只检查一个组合是否存在的递归函数。如果我没有正确解决您的要求,请发表评论。

public static boolean splitPrime(int n, int pow10) {
        return (isPrime(n / pow10) && isPrime(n % pow10))
                || (pow10  < n/10 && splitPrime(n, pow10 * 10));
    }

使用splitPrime(n,10)调用它

【讨论】:

  • 要求说递归函数必须只接受 1 (one) 参数。
猜你喜欢
  • 1970-01-01
  • 2020-11-21
  • 2017-03-03
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 2021-01-30
  • 2019-05-05
相关资源
最近更新 更多