仕事を頑張る人のおしりトラブル対策

javaで素数を探すプログラム。
初歩的なことかと思いますが、助言をお願いします。
if(a[i-1]) ←この部分がわかりません。これはどのような条件がなのでしょうか?


class Prime {
public static void main(String[] args) {
int max = 100; // 素数を探す数の最大値
boolean[] a = new boolean[max]; // 素数かどうか判定する配列

// 配列の初期化
for(int i = 0; i < max; i++)
a[i] = true;

// 素数かどうか判定
for(int i = 2; i < max; i++) {
if(a[i-1]) {
for(int j = 2; i*j <= max; j++)
a[i * j - 1] = false;
}
else
continue;
}

// 結果を表示
for(int i = 1; i < max; i++) {
if(a[i])
System.out.print((i + 1) + " ");
}
System.out.println();
}
}

このプログラム

このQ&Aに関連する最新のQ&A

A 回答 (1件)

アルゴニズムが分かっているかですかね・・・



素数かどうかを判定するのはmaxまでの数から1を除いた(max-1)個の数なので
iが素数かどうかの判定結果をa[i-1]に入れてあります

1 配列の初期化ですべてが素数と仮定

2 if(a[i-1])でiが素数かどうかを判定
2.1 素数だった場合MAXまでのiの倍数の数の判定結果をfalseに設定する
2.2 素数じゃなかったら次の数
[補足]iが素数でなかった場合i-1までに判定がfalseに設定されているはずである

3 結果表示
a[i]がtrueならi+1は素数である!
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なるほど。つまり
if(a[i-1] == true)
ってことなんですかねぇ・・・?勉強になりました!

それとアルゴニズムは知らないっすw

お礼日時:2010/08/30 19:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJAVAで素数判定

JAVAの勉強をしてます
練習問題で、素数判定のプログラムをしているのですが。

1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか?

//読み込んだ数字 n が 15 の場合

if(n == 1)
System.out.println("素数ではありません。");
if(n == 2)
System.out.println("素数です。");

for (int i = 2; i < n; i++) {
if (n % i == 0) {
System.out.println("素数ではありません。");
break;
} else {
System.out.println("素数です。");
break;
}
}

--結果----------------------------------------------
素数です

Aベストアンサー

 簡単に直すには、判定と出力のロジックを分ければよいのです。
 for分のところだけ

boolean issosu = true;
for (int i=2; i<n ; i++) {
 if (n % i == 0) {
  issosu = false;
  break;
 }
}

if (issosu) {
 System.out.println("素数です。");
} else {
 System.out.println("素数ではありません。");
}

Qjava 素数判定

入力した数字が整数か否かを判定するjavaプログラムを作っています。
以下の通りコンパイルして実行しました。これだと実行したときに
どんな数字を数字を入力しても「31は素数です。 」となります。
入力した数字を判定させるにはどのようにしたらいいのでしょうか?

class Sosuu {
public static void main (String[] args) {
int n = 31;

boolean isPrime = true;
for (int i = 2; i <= n - 1; i++)
if (n % i == 0) {
isPrime = false;
break;
}

if (isPrime)
System.out.println(n + " は素数です。");
else
System.out.println(n + " は素数ではありません。");
}
}

Aベストアンサー

このプログラムは「31は素数かどうかを判定するプログラム」ですね。

なので、まずは「int n=31;」の部分を修正する必要があります。
入力した数字(引数)は「args[0]」に代入されるので、これをnに代入しましょう。
ただし、argsはString型なので、int型にキャストしなければ代入できません。

そのあたりを考慮しながらコーディングしてみてください。

Qpublic static void main (String args[])

基本すぎて申し訳ありませんが、
public static void main (String args[])とはどういう意味を持っていますか?
教えてください。。

Aベストアンサー

staticとかの意味はNo1の方の説明以外にありません。

mainは最初に実行されるメソッドという説明がされますので、「クラスを実行する時の引数とは?」と引っかかっているのかもしれませんね。
これはコマンドライン引数と呼ばれます。

たとえば、次のプログラム

public class ArgsTest{
  public static void main(String[] args){
    System.out.println(args.length);
    for(int i = 0 ; i < args.length ; i++){
      System.out.println(args[i]);
    }
  }
}

これを
>java ArgsTest abcde fghij(エンター)
として実行するとabcdeとfghijが引数となります。

ちなみに、mainはpublicでstaticなメソッドなので、
public class ArgsTest2{
  public static void main(String args[]){
    tamesi();
  }
  void tamesi(){
    String[] test = {"abcde","fghij"};
    ArgsTest.main(test);
  }
}
のように、外部のクラスからクラス名.mainで呼び出せます。(この2つのプログラムは、私が悩んだ時に試しにつくったものです)

ちなみにargsはarguments(=引数)の略で、mainの引数として、よく使われます。
argvのほうはargument valueの略です。C言語を使っていた人の中にはargvを使う人がいるかもしれません。

staticとかの意味はNo1の方の説明以外にありません。

mainは最初に実行されるメソッドという説明がされますので、「クラスを実行する時の引数とは?」と引っかかっているのかもしれませんね。
これはコマンドライン引数と呼ばれます。

たとえば、次のプログラム

public class ArgsTest{
  public static void main(String[] args){
    System.out.println(args.length);
    for(int i = 0 ; i < args.length ; i++){
      System.out.println(args[i]);
    }
  }
}

...続きを読む

Q行列の表示

任意の数nを入力してn×nの正方行列を表示させるプログラムを二次元配列を使って作りたいのですが出来ません。配列の初期化は

int matrix[][] = new int[n][n]

のように行えばよいと思うのですが、最終的にどう表示させればよいのでしょうか?
System.out.println(matrix[][])
を使うと改行されてしまいますし...
アドバイスよろしくお願いします。

Aベストアンサー

配列の中身を自動的に一つずつ表示する機能はないので、自分でループを書いて表示させることになります。

System.out.print と System.out.println をうまく使い分けてみてください。
print では文字列を出力するだけで改行はされません。また、文字列を指定せずに単に System.out.println() を実行すると改行だけが出力されます。

Q【初心者です】javaで平均値を求めたいのですが...

import java.io.*;

public class ex31a {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader

(System.in));
double sum = 0.0;
while(true) {
System.out.print("double> ");
double x = (new Double(in.readLine())).doubleValue();
if(x == 0.0) { break; }
sum = sum + x;
}
System.out.println("avarage = " + (sum % n));
}
}


基本形はこのままで、最後の部分のSystem.out.printlnの部分を直したらいいんでしょうか。

import java.io.*;

public class ex31a {
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader

(System.in));
double sum = 0.0;
while(true) {
System.out.print("double> ");
double x = (new Double(in.readLine())).doubleValue();
if(x == 0.0) { break; }
sum = sum + x;
}
System.out.println("avarage = " + (sum % n));
}
}


基本形はこのままで、最後の部分のSys...続きを読む

Aベストアンサー

import java.io.*;

public class ex31a {
public static void main(String[] args) throws Exception {
int n = 0; /* 個数を示すnをきちんと変数として宣言 */
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
double sum = 0.0;
while(true) {
System.out.print("double> ");
double x = (new Double(in.readLine())).doubleValue();
if(x == 0.0) { break; }
sum = sum + x;
n = n + 1;/* 個数を計算 */
}
/*
System.out.println("sum = " + sum );
System.out.println("n = " + n);
*/
/* %は余りを求めるものである。平均は/で割らないと*/

/* double/ intがどうなるのかを考えたことはないけどw */
System.out.println("avarage = " + (sum / n));
}
}

import java.io.*;

public class ex31a {
public static void main(String[] args) throws Exception {
int n = 0; /* 個数を示すnをきちんと変数として宣言 */
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
double sum = 0.0;
while(true) {
System.out.print("double> ");
double x = (new Double(in.readLine())).doubleValue();
if(x == 0.0) { break; }
sum = sum + x;
n = n + 1;/* 個数を計算 */
}
/*
System.out.println("sum = " + sum );
System.out.p...続きを読む

Qjavaで九九の表を作りたい

学校の課題でjavaで九九の表を作ってみたのですが、うまくいきません。
アドバイスいただけないでしょうか。

・以下のような結果が欲しいと考えています。数字の間はタブで区切ります。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 . . . .
4 8 . . .
. .
.
.

・作ってみたコードです。
class Sample
{
public static void main(String args[]){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;i++){
System.out.print(i*j+"/t");
}
System.out.print("/n");
}
}
}

・実行した結果です。
1/t2/t3/t4/t5/t6/t7/t8/t9/t10/t11/t12/t13/t14/t15/t16/t17/t18/t19/t20/t21/t22/t23/t24/t25/t26/t27/t28/t29/t30/t31/t32/t33/t34/t35/t36/t37/...

・考えられる問題は、
  ・"/t"がタブではなくて"/t"という文字列として認識されている。
  ・i*jが掛け算として計算されていない
  ・System.out.print("/n");は処理されていない
こんなとことでしょうか。

宜しくお願いします。

学校の課題でjavaで九九の表を作ってみたのですが、うまくいきません。
アドバイスいただけないでしょうか。

・以下のような結果が欲しいと考えています。数字の間はタブで区切ります。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 . . . .
4 8 . . .
. .
.
.

・作ってみたコードです。
class Sample
{
public static void main(String args[]){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;i++){
System.out.print(...続きを読む

Aベストアンサー

Windowsなら/ はなく \
Linnuxならバックスラッシュ

for(int j=1;j<=9;i++){

for(int j=1;j<=9;j++){

iとjが紛らわしいよね。

Q数字か文字列かを判定する関数

 JAVAの初心者です、宜しくお願いします。
  
 テキストボックスに入力された値を、数字か文字列かを判定する関数ってありますか、VBでは「isNumeric」とかがあるのですが、JAVAではヒットしませんでした。

 どこからどのように調べるのでしょうか。
 いいサイトがあれば教えて下さい。

Aベストアンサー

・ たとえば、整数か文字列かの場合、クラスIntegerのparseInt(String s)メソッドを使い、例外(NumberFormatException)が発生するかどうかで判断します。

以下のコードを参考にしてみてください。
------------------------------------------------------------
public class ParseIntSample {

public static void main(String[] args) {
System.out.println(isInteger("123"));
System.out.println(isInteger("123A"));
}

static boolean isInteger(String num) {
try {
int n = Integer.parseInt(num);
return true;
} catch (NumberFormatException e) {
return false;
}
}
}
------------------------------------------------------------
結果
true
false
------------------------------------------------------------
実数の場合は、Double.parseDouble(String s)があります。
これも、例外(NumberFormatException)を発生します。

・ たとえば、整数か文字列かの場合、クラスIntegerのparseInt(String s)メソッドを使い、例外(NumberFormatException)が発生するかどうかで判断します。

以下のコードを参考にしてみてください。
------------------------------------------------------------
public class ParseIntSample {

public static void main(String[] args) {
System.out.println(isInteger("123"));
System.out.println(isInteger("123A"));
}

static boolean isInteger(String num) {
try {
int n = Integer.parse...続きを読む

Qjava for文、if文を使っての三角形

例:1
23
456
78910
・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を
  作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが
  出来るのか教えてください。お願いします。

public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

// 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。
int a = 1;

//行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。
int b = 1;

// 1~100までの数字を用意する。
for (int i = 1; i <= 100; i++) {

//変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。
System.out.print(i);

//System.out.println("")を使って改行する。
System.out.println(" ");

//変数iに1増加して数字を順番にする。
i++;

if(a <= i){

System.out.print(a);

例:1
23
456
78910
・・・・・・のようにひょうじさせるプログラムを作成するのに、for文とIf文を使っての三角形を
  作成したいのですが、If文の条件式が分からないのとどうしたら、上記のようなプログラムが
  出来るのか教えてください。お願いします。

public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

// 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。
int a = 1;

//行の終わりを改行して1増やすた...続きを読む

Aベストアンサー

public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

// 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。
int a = 1;

//行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。
int b = 0;

// 1~10までの数字を用意する。
for (int i = 1; i <= 10; i++) {

//変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。
System.out.print(i);
b++;

if(b>=a){
//System.out.println("")を使って改行する。
System.out.println(" ");
b=0;
a++;
}
}

// 93~105までの数字を用意する。
for (int i = 93; i <= 105; i++) {

//変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。
System.out.print(i);

}

public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ

// 行に表示させる個数を表現するための変数がないため今回、新たに変数を用意する。
int a = 1;

//行の終わりを改行して1増やすための変数がないため今回、新たに変数を用意する。
int b = 0;

// 1~10までの数字を用意する。
for (int i = 1; i <= 10; i++) {

//変数iをSystem.out.printを使って変数iをコンソールの中に出力させる。
System.out.print(i);
b++;

if...続きを読む


人気Q&Aランキング

おすすめ情報