2014-11-22 50 views
0

这是我的代码。 我知道这可能是非常复杂的愚蠢的错误,但我正在学习! 无论n是什么,它总是只输出2。在一个区间内打印质数

public static void prime(int n) 
{ 
    int i; 
    int b = 1; 
    int d; 
    int a =0; 
    for (i=1; i!=n; i++){ 
     while (b!=i){ 
      d = i/b; 
      if (d == i) 
       a = 1; 
      else 
       a = 2; 
      b++; 
     } 
     if (a==1) 
      System.out.println(i); 
    } 
+0

[**如何确定Java中的素数](http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/) – 2014-11-22 13:05:42

+0

要通过改变最少行数来解决这个问题,我认为你可以做的就是'd = i%b',然后如果'd == 0'则设置为'a = 2'。 – irrelephant 2014-11-22 13:08:21

+1

避免使用'!='作为数字的终止条件。这种检查很大程度上取决于您如何增加/减少变量。因此,您可以轻松地跳过那里'i == n'的情况。对于这种情况,使用'<='(或'<') and '> ='(或'>')。 – Tom 2014-11-22 13:12:16

回答

2

我没有看到你的奇怪while循环如何找到一个数是素数。

您应该检查n是否可以被2sqrt(n)之间的任何数字i整除。

您检查条件是if (n%i==0)

0

若要检查数字是否为素数,您应该检查数字是否可以被1整除。这是一个简单的代码片段。

public static void prime (int n){ 
int countZero=0; //counts the number of times n is divisible by another number 
//@var div is the divisor 
for (int div=1;div<=n;div++){ 
     if (n%div==0){ 
      countZero++; 
     } 
     //n is divisible by 1 and itself 
     if (countZero==2){ 
     System.out.println(n+", is a prime number"); 
}