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

何が起こっているのかというと、iが1のとき(1の場合をテストしているとき)、このループは次のようになります。

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

プライムは実際にはi未満ではないため、実行されません。プライムは2から始まるためです。つまり、プライム= 2であるため、i==プライムであるかどうかがチェックされます。

于 2012-10-23T03:09:29.107 に答える
0

プライム変数は値2で初期化されますが、1==2をチェックしています。

値iをテストし、if条件の前にプライムすることができます

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 に答える
0

Javaは、1が素数ではないことを認識しており、それを出力しません。

'の最初の2つのグーグル結果は1素数です'それを証明します。

于 2012-10-23T03:11:00.063 に答える
0

プライムでフィズバズをしようとしている場合は、ループを1つだけ必要とし、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

2番目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 に答える