【问题标题】:Java Recursion and super prime numbersJava 递归和超素数
【发布时间】:2013-09-25 00:50:33
【问题描述】:

此方法旨在递归地遍历该方法并判断一个数字是否为“超级素数”。超级素数是一个本身就是素数的数,每次它被 10 减去时,所有这些数也是素数。例如 2333 是超素数,因为 233 是素数 23 是素数,2 是素数。 即使我传入数字 2333,我的方法仍然返回 false。 isPrime() 方法成功地测试了一个数字是否为素数。

public boolean isSuperPrime(int h)
{
    if((h<10)&&isPrime(h))
        return true;
    else if(isPrime(h))
        return isSuperPrime(h/10);  
    else
        return false;


}

【问题讨论】:

  • 向我们展示您的isPrime() 方法。
  • 你有没有在调试器下一步步运行,看看你的代码是如何工作的?
  • 不,他们不是。听起来您在没有检查它是否已经是数学中的既定名称的情况下就提出了这个术语。它是——en.wikipedia.org/wiki/Super-prime
  • 您的 isSuperPrime 方法是正确的。错误必须在 isPrime 中。
  • 您应该向我们展示您的isPrime() 方法。至少,您是否检查过它是否为 2333、233、23 和 2 返回 true

标签: java recursion primes


【解决方案1】:

我怀疑你的 isPrime 方法不正确,我运行了这个确切的代码:

public static void main(String []args)
{
   System.out.println(isSuperPrime(2333));
}

public static boolean isSuperPrime(int h)
{
    if ((h<10)&&isPrime(h))
        return true;
    else if (isPrime(h))
        return isSuperPrime(h/10);  
    else
        return false;
}

//Note this is not an efficient implementation, 
//but it is correct, was just using it to test
public static boolean isPrime(int n)
{
    for(int i=2;i<n;i++) {
        if(n%i==0)
             return false;
    }
    return true;
}

它返回true

【讨论】:

  • @TerryLi:从技术上讲,您只需要循环到sqrt(n)。另一个常见的优化是只检查 2 + 奇数的整除性。
  • 我意识到它效率不高,这只是我用谷歌搜索时的第一个结果(与问题无关,只是需要一些东西来测试)。
  • @Terry 如果你对 sqrt(n) 执行此操作会更好,如果 sqrt 需要时间,则可以表示为 i*i &lt; n
  • @PM77-1:isSuperPrime() 函数可以通过只调用一次isPrime(h) 来提高效率,但它正确的。你错了 - 看看你的答案的 cmets。
  • @BlueRaja-DannyPflughoeft 非常感谢您的关注。
猜你喜欢
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 2020-07-15
  • 2016-01-22
  • 2019-08-04
  • 1970-01-01
  • 2014-09-13
  • 2017-01-19
相关资源
最近更新 更多