问题是:
打印两个给定数字之间的所有素数。例如:函数为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));
}
}
答案 0 :(得分: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 @ answer所说,你可以更早地终止循环。 请参阅this以了解为什么循环直到数字的平方根已足够。
答案 1 :(得分:0)
上述答案不足以解决这个问题。 在第二个循环的任何运行中,你想检查我是否输入任何j的每一个。 定义一个布尔值,对于每个i,检查每个j是否j正在划分他,(而j不是我自己)。如果是这样,那么就不要做任何事情,并继续运行。否则,到目前为止,我与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;
}
答案 2 :(得分: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
对代码进行了一些优化,您仍然可以进行更多优化,只需谷歌如何优化素数生成。
答案 3 :(得分: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]
答案 4 :(得分: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;
}
}