【问题标题】:Finding a prime number that is one greater than a squared number from a given number [closed]从给定数字中找到比平方数大一的素数[关闭]
【发布时间】:2014-01-29 17:52:17
【问题描述】:

所以我有一个我正在为课堂工作的小方法,这个问题是一个棘手的问题,有点令人困惑。基本上我要做的是编写一个方法,该方法将采用您输入的数字,它会找到下一个比平方数大 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;
}

【问题讨论】:

  • 如果你不亲自尝试,你永远学不会......

标签: java primes


【解决方案1】:

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

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

输入是要四舍五入的数字。将结果转换为 int 会自动舍入它。它是可选的。我将输入转换为双精度,但您只需要在输入为 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;

    }

【讨论】:

  • 如何在不使用 Math.sqrt 的情况下使用平方根方法,老师不想在这个程序中使用它
  • 你不能。 sqrt() 方法是 Math 类中的一个方法。所以,如果我理解的话,老师不希望你使用数学课?
  • 更正这个程序没有数学课
  • 你的老师可以接受我给你一个可以找到数字平方根的sn-p代码吗?不是我写的,只是稍微修改了一下以适应你的情况。
  • 我不认为老师会介意,只要我掌握了它的要点,我很可能不会使用确切的代码,只是将其用作我自己代码的指南
【解决方案2】:

您应该为更具体的指针提供一些额外的细节。

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

求平方比求平方根更容易,因此先求起始数字的平方根,然后四舍五入可能更有意义。取那个数字并将其平方,加 1 并检查素数。如果不是,请将变量加 1,然后重试。

祝你好运。

【讨论】:

  • 有点难以解释我想要做什么,但就像我想做的那样,可能有一个 while 循环或 for 循环在那里。如果我添加一个for循环,那将是其中的两个我想要的是一个循环,它首先检查数字是否为素数,然后另一个循环检查该数字是否大于平方数,我不确定哪个更高效
  • 对于较小的数字,效率上的差异可能是无形的。给定一个可以访问平方根函数的库,检查平方根比检查素数更容易。如果您正在做一些更高级的事情,效率很重要,并且您正在提供自己的库,您可以考虑使用在启动时计算的 Eratosthenes 筛子,然后检查素数变成 O(1)。
猜你喜欢
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 2021-05-06
  • 1970-01-01
  • 2011-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多