查找比给定数字大一个平方数的素数

时间:2014-01-29 17:52:18

标签: java primes

所以我有一个小方法,我正在上课,这个问题很难,有点令人困惑。基本上我必须写的是一个方法,它将输入你输入的数字,它会找到比平方数大1的下一个素数。例如,如果我输入10,结果将是17,因为17是素数,1是大于正方形,正方形是16.所以我必须写一个只有一个return语句的方法来做这个,我完全不知道从哪里开始。到目前为止我所拥有的是public static int nextSquarePlus1Prime(int num){ }字面意思。一些帮助将不胜感激。  我已经有了这种方法,我检查数字是否为素数:

public static boolean isPrime(int num){

    int i;
    boolean numberIsPrime=true;
    if(num==1){
        numberIsPrime=false;
    }

    for(i=2;i*i<=num;i++){
        if(num%i==0){
            numberIsPrime=false;
        }
    }

    return numberIsPrime;
}

有没有办法使用另一段代码添加到此方法以与此方法一起检查数字是否为正方形?

所以这就是我为我的代码想出的东西,我把10作为我的号码。当我得到17岁时,我已经50岁了。

public static int nextSquarePlus1Prime(int num){
    int i;
    int save=0;

    for(i=1;i<=num;i++){
        if(isPrime(i)&& i*i+1>=num){
            save=i*i+1;    
        }
    }

    return save;
}

2 个答案:

答案 0 :(得分:0)

您应该为更具体的指针提供一些其他详细信息。

在Java中,有一种方法“可能是素数”可能对您有用。

比找到平方根更容易对数字进行平方,因此找到起始数的平方根,然后向上舍入可能是有意义的。取这个数字并加上它,加1并检查素数。如果没有,请将1添加到变量中,然后重试。

祝你好运。

答案 1 :(得分:0)

sqrt()方法可能有所帮助。以下是如何使用它的想法:

int squareRoot = (int) Math.sqrt((double) input);

输入您想要舍入的数字。将结果转换为int将自动舍入它。这是可选的。我将输入转换为double,但是如果您在int中输入,则只需要这样做。

这是检查数字是否为素数的更简单方法:

if (input % 2 == 0){
    input += 1;
} 
    return input;

我建议你再看看@useSticks的答案。使用他描述的方法,我创建了一个完全符合我的想法的方法。

这是一个找到正数的平方根的方法:

 public static int sqrt(double number){

        double g1;

       if(number==0){
            return 0;
        }

        double squareRoot = number/2;

        do{

            g1=squareRoot;
            squareRoot = (g1 + (number/g1))/2;

        }while((g1-squareRoot)!=0);

           return (int) squareRoot;

    }