↓素数判定のプログラム書きました。遅いです。もっと良い奴誰か教えてYO!
------------------------------------------------------------------------
public class PrimeChecker {
private int[] preparedPrimes;//あらかじめ用意しておく素数の配列
/** @param preparedLength あらかじめ用意しておく素数の数 */
public PrimeChecker(int preparedLength) {
preparedPrimes = new int[preparedLength];
for (int i = 0, j = 2; i < preparedLength; i++) {
while (true) {
if (check(j, false) == -1) {
preparedPrimes[i] = j;
j++;
break;
}
j++;
}
}
}
/**
* @param target チェック対象の数
* @param usePreparedPrimes trueならばあらかじめ用意してある素数を利用する
* @return 素数ならば-1を返し、素数でないならば割れた数を返す
*/
public int check(int target, boolean usePreparedPrimes) {
if (target == 2) return -1;
int divisor = 2; //この数でtargetを割る。約数の最小は2
int limit = target; //この数に到達するまで割りつづける
int index = preparedPrimes.length;
if (usePreparedPrimes) index = 1;
while (divisor <= limit) {
if (target % divisor == 0) return divisor;
if (index < preparedPrimes.length) {
divisor = preparedPrimes[index];
index++;
} else {
divisor++;
}
limit = target / divisor;
}
return -1;
}
}
↓続き
--------------------------------------------------
import java.io.*;
public class PrimeTest {
/**
* 指定した数までに存在する素数を割り出す。
* [使用例] > java PrimeChecker 1000 prime.txt
* 第1引数:指定する数
* 第2引数:出力するファイル名(指定しない場合は、ファイル出力しない)
*/
public static void main(String[] args) throws Exception {
int maximum = Integer.parseInt(args[0]);
PrintWriter out = null;
if (args.length > 1) out = new PrintWriter(new BufferedWriter(new FileWriter(args[1])));
PrimeChecker checker = new PrimeChecker(1000);//あらかじめ1000の素数を作るよ
double twoPercent = maximum / 50;
System.out.println("----+----+----+----+----+----+----+----+----+----+");
double start = System.currentTimeMillis();
int x = 10;
for (int i = 2; i <= maximum; i++) {
int result = checker.check(i, true);
if (result == -1 && out != null) out.println(i);
if ((double)i % twoPercent == 0.0f) System.out.print("*");
}
System.out.println();
double end = System.currentTimeMillis();
System.out.println((end - start) / 1000 + "秒");
if (out != null) out.close();
}
}
767 :
デフォルトの名無しさん:01/11/18 00:45
今からジャヴァはじめようと思うんですが、
どんな本やサイトがおすすめですか?
教えてください。お願いします。
main()に書いた使用例間違えたYO・・。
×> java PrimeChecker 1000 prime.txt
〇> java PrimeTest 1000 prime.txt