【问题标题】:How can I check if numbers are consecutive primes?如何检查数字是否是连续素数?
【发布时间】:2013-08-02 19:05:09
【问题描述】:

输入行包含三个正整数:rsa,其中(2 <= r < s < a)。保证r 是素数。

它应该打印YES,如果sr之后的下一个素数并且as之后的下一个素数;否则,它应该打印NO

目前,我有以下isPrime() 方法:

boolean isPrime(int n)  {
    //check if n is a multiple of 2
    if (n%2==0) 
        return false;
    //if not, then just check the odds
    for(int i=3;i*i<=n;i+=2) {
        if(n%i==0)
            return false;
    }
    return true; 
}

【问题讨论】:

  • 连续要求你试过什么?如果你没有尝试过,我们就不会做你的功课。
  • 那是我很困惑的部分......并且需要帮助。任何指针将不胜感激
  • 它们都是素数吗?它们之间有素数吗?
  • 另外,你的 isPrime 方法说 2 是复合的...
  • 琐碎(次优解):1.都是三个素数。 2. 遍历 r-s 和 s-a,检查那里的素数。如果第一个成功(是的,三个素数),后两个失败(不,没有其他素数),那么你就成功了。否则,失败。

标签: java


【解决方案1】:

试试这个:

public int nextPrime(int start){
    int next = start+1;

    while(!isPrime(next)){
        next++;
    }

    return next;
}

public void arePrimeSequence(int r, int s, int a){
    int firstPrime = nextPrime(r);
    int secondPrime = nextPrime(firstPrime);

    if(s == firstPrime && a == secondPrime){
        System.out.println("YES");
    }
    else{
        System.out.println("NO");
    }
}

【讨论】:

    【解决方案2】:

    可以在代码中进行一些改进以确定下一个素数。您可以将数字增加 2,而不是增加 1。因为第一个数字保证为素数,如果不是 2,则增加 2。

    public int nextPrime(int start){

    if (start==2) return 3;
    int next = start+2;
    
    while(!isPrime(next)){
        next+=2;
    }
    
    return next;
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-20
      • 2018-10-06
      • 2016-11-27
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多