仅在 Java 中打印两个给定数字之间的所有素数

问题描述 投票:0回答:6

大家,我尝试了这个程序,但没有得到预期的答案,请帮助我。

问题是:

打印两个给定数字之间的所有素数。例如:函数为

Prime(beg,end)
,对于
Prime(4,7)
,将返回{5,7},对于
Prime(7,16)
,将返回{7,11,13}。 我的代码:

package com.robin.practise;

import java.util.Scanner;

public class PrimebetweenRange 
{

    private static String Prime(int beg, int end)
    {
        String res= " ";
        for(int i= beg; i<= end; i++)
        {
            for(int j=2; j<= end; j++)
            {
                if(i%j!= 0)
                {
                    //System.out.println(i+  " ");
                    res= i+ " ";
                }
            }
        }
        return res;
    }

    public static void main(String[] args) 
    {
        Scanner scn= new Scanner(System.in);
        System.out.println("Enter any two numbers: ");
        int n1= scn.nextInt();
        int n2= scn.nextInt();
        scn.close();
        System.out.println(Prime(n1, n2));
    }
}
java function primes
6个回答
1
投票

如果一个数不能被一个数整除,你就不能判定它是素数。您需要添加到内部循环末尾的结果中。

您的代码中有很多问题。这是工作中的

for(int i= beg; i<= end; i++) {
    boolean prime = true;  //start by assuming the current number is prime
    for(int j=2; j<i; j++) { // Loop till j < i
        if(i%j == 0) {
          prime = false; //Set the current number as not prime if it is divisible by any number lesser than it
        }
   }
   if (prime) {
       res += i+ " ";   //Add to result
   }
}

注意: 正如 sanit@ 答案所说,您可以更早地终止循环。 请参阅this了解为什么循环直到数字的平方根就足够了。


0
投票

上面的答案不足以解决这个问题。 在第二个循环的任何运行中,您想要检查 i 是否输入任何 j 的每个 if 。 定义一个布尔值,对于每个 i,检查每个 j 是否整除他(而 j 不是 i 本身)。如果是这样,那么什么也不做,继续运行。否则,将 i 与到目前为止的 res 连接起来,并在最后打印它;

boolean flag=true;
for(int i= beg; i<= end; i++)
    {
        for(int j=2; j<= end; j++)
        {
            if(i%j== 0 && i!=j)
            {
                flag=true;
                res= i+ " ";
            }
        }
    if(!flag){
      res+=i +" ";}
    flag=false;
    }
    return res;
}

0
投票
private static String Prime(int beg, int end) {
    String res = " ";
    outer: for (int i = beg; i <= end; i++) {
        int upto = (int) Math.sqrt(end);
        for (int j = 2; j <= upto; j++) {
            if (i != j && i % j == 0) {
                continue outer;
            }
        }
        System.out.println(i + " ");
    }
    return res;
}

我已经使用

Math.sqrt
稍微优化了代码,您仍然可以做更多优化,只需谷歌如何优化素数生成即可。


0
投票

这是一个可行的解决方案:

public static void primeBetween(int beg, int end) {
        List<Integer> result = new ArrayList<Integer>();
        for (int n = beg; n <= end; n++) {
            boolean prime = true;
            for (int j = 2; j <= n / 2; j++) {
                if (n % j == 0 && n != j) {
                    prime = false;
                }
            }
            if (prime) {
                result.add(n);
            }
        }
        System.out.println(result);
    }

    /* Driver program  */
    public static void main(String[] args) {
        primeBetween(2, 25);
    }

这是输出:[2, 3, 5, 7, 11, 13, 17, 19, 23]


0
投票

此方法将打印两个数字之间的素数

public static void getPrime(int low, int high) {

    while (low < high) {
        boolean flag = false;

        for(int i = 2; i <= low/2; ++i) {
            // condition for nonprime number
            if(low % i == 0) {
                flag = true;
                break;
            }
        }

        if (!flag)
            System.out.print(low + " ");

        ++low;
    }

}


0
投票
import java.util.Scanner;

public class main {

public static void primefinder(int beg, int end) {
    for (int i = beg; i <= end; i++) {
        boolean prime = true;  // Start by assuming the current number is prime
        for (int j = 2; j < i; j++) { // Loop until j < i
            if (i % j == 0) {
                prime = false; // Set the current number as not prime if it is divisible by any number lesser than it
            }
        }
        if (prime == true) {
            System.out.println(i + " is prime");
        }
    }
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("what is your first number");
int inputbeg = scanner.nextInt();
System.out.println("what is your last number");
int inputend = scanner.nextInt();
primefinder(inputbeg,inputend);
   }
}

我修复了你的代码,以更好地适应这个人的问题@thiyagu

© www.soinside.com 2019 - 2024. All rights reserved.