1

我试图弄清楚如何做从 1 到 101 的素数。到目前为止我已经得到了这个:

public class BreakShow{
  public static void main(String[] args){
  int i;
  int prime;

  System.out.println("Prime numbers from 1 to 101 : ");
    for (i = 1;i < 102;i++ ){
        for (prime = 2;prime < i;prime++ ){
            if(i % prime == 0) {
                break;
            }
        }
        if(i == prime) {
            System.out.print("  " + i);
        }
    }
  }
}

我无法让它打印 1。我尝试更改 i 和 prime 的值,但它不起作用。似乎与打印链接,它只是没有继续。我想我不太了解 for 语句的条件以及它是如何运作的。

4

5 回答 5

0

如果你想用 prime 做嘶嘶声,那么你应该只需要一个循环和 2 的 mod。你可以做这样的事情。

for(int i = 1; i <= 101; i++){
   if( (i%2) != 0) // use the smallest even number to check against.
      println("prime");
}
于 2012-10-23T03:19:36.303 回答
0

Java 知道 1 不是素数并且不会打印它。

'is 1 a prime number' 的前两个谷歌结果证明了这一点。

于 2012-10-23T03:11:00.063 回答
0

由于第二个for循环以 2 开头,因此由于i==prime打印前的条件而跳过 1。如果您真的想打印 1,请更新您的条件如下:

     public static void main(String[] args) {
          int prime;
          System.out.println("Prime numbers from 1 to 101 : ");
            for (int i = 1;i < 102;i++ ){
                for (prime= i-2;prime > 1;prime-- ){
                    if(prime< 0 || i % prime == 0) {
                        break;
                    }
                }
                if(prime < 0 || prime==1) {
                    System.out.print("  " + i);
                }
           }
      }
于 2012-10-23T03:28:19.973 回答
0

发生的事情是当 i = 1 时(当你测试 1 的情况时),这个循环:

for (prime = 2;prime < i;prime++ ){
    if(i % prime == 0) {
        break;
    }
}

从不运行,因为素数实际上永远不会小于 i,因为素数从 2 开始。这意味着它会检查 i == 素数,它永远不会是,因为素数 = 2。

于 2012-10-23T03:09:29.107 回答
0

素数变量用值 2 初始化,但您正在检查 1==2。

你可以在 if 条件之前测试值 i 和 prime

System.out.println("i:: "+ i+ "  prime:: "+prime);
    if(i == prime) 
        {
            System.out.print("  " + i);
        }

so if clause  does not meet the condition 
于 2012-10-23T03:09:45.933 回答