匿名質問者

1~100までの間の素数を出力するプログラムをJavaScriptで作るにはどうすればよいのですか。

課題で出たのですが、模範的な解答例を確認しておきたいです。
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/05/05 22:55:06
匿名質問者

質問者から

匿名質問者2014/04/28 23:05:51

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97・・・といった感じです。よろしくお願いします。

ベストアンサー

匿名回答3号 No.2

こうですかね!

var PrimeFilter = function() {};
PrimeFilter.prototype.filter = function(checkNum){
	if (checkNum == 1) { return false; }
	
	for(var i=2; i<checkNum; i++) {
		if (checkNum % i == 0) { return false; }
	}
	return true;
};

var ConsoleWriter = function() {};
ConsoleWriter.prototype.write = function(s){
	console.log(s);
};

var NumRange = function(){ this.init.apply(this, arguments); }
NumRange.prototype.init = function(start, end, filterObject) {
	this.list = [];
	for (var i=start; i<=end; i++) { this.list.push(i); }
	this.list = this.list.filter(filterObject.filter);
};
NumRange.prototype.write = function(writer) {
	this.list.forEach(function(i){
		writer.write(i);
	});
};

var Application = function() {};
Application.prototype.run = function(){
	var primeRange = new NumRange(1, 100, new PrimeFilter());
	primeRange.write(new ConsoleWriter());
};

var app = new Application();
app.run();

 
まあ、拡張性とか考えることは求められていないだろうから、想定される模範解答はおそらくこうなんですけどね。

function checkPrime(checkNum) {
	if (checkNum == 1) { return false; }
	
	for(var i=2; i<checkNum; i++) {
		if (checkNum % i == 0) { return false; }
	}
	return true;
};

for (var i=1; i<100; i++) {
	if (checkPrime(i)) { console.log(i); }
}
匿名質問者

おそらくconsole.logで確認するまでで問題無いとは思いますが、上記の解答例も個人的なスキルアップのために参考にさせていただきます。ありがとうございます。

2014/04/29 09:45:44

その他の回答2件)

匿名回答2号 No.1

匿名質問者

ありがとうございます。解説もついているのでこれで出力する仕組みを理解してみようと思います。

2014/04/28 23:48:52
匿名回答3号 No.2

ここでベストアンサー

こうですかね!

var PrimeFilter = function() {};
PrimeFilter.prototype.filter = function(checkNum){
	if (checkNum == 1) { return false; }
	
	for(var i=2; i<checkNum; i++) {
		if (checkNum % i == 0) { return false; }
	}
	return true;
};

var ConsoleWriter = function() {};
ConsoleWriter.prototype.write = function(s){
	console.log(s);
};

var NumRange = function(){ this.init.apply(this, arguments); }
NumRange.prototype.init = function(start, end, filterObject) {
	this.list = [];
	for (var i=start; i<=end; i++) { this.list.push(i); }
	this.list = this.list.filter(filterObject.filter);
};
NumRange.prototype.write = function(writer) {
	this.list.forEach(function(i){
		writer.write(i);
	});
};

var Application = function() {};
Application.prototype.run = function(){
	var primeRange = new NumRange(1, 100, new PrimeFilter());
	primeRange.write(new ConsoleWriter());
};

var app = new Application();
app.run();

 
まあ、拡張性とか考えることは求められていないだろうから、想定される模範解答はおそらくこうなんですけどね。

function checkPrime(checkNum) {
	if (checkNum == 1) { return false; }
	
	for(var i=2; i<checkNum; i++) {
		if (checkNum % i == 0) { return false; }
	}
	return true;
};

for (var i=1; i<100; i++) {
	if (checkPrime(i)) { console.log(i); }
}
匿名質問者

おそらくconsole.logで確認するまでで問題無いとは思いますが、上記の解答例も個人的なスキルアップのために参考にさせていただきます。ありがとうございます。

2014/04/29 09:45:44
匿名回答4号 No.3

こんな感じ

素数判定の処理を,再帰アルゴリズムで1文で書いたJavaScriptプログラムは
http://d.hatena.ne.jp/TipsMemo+computer-technology/20140429/p1

匿名質問者

いろいろやり方がありますね。こちらも勉強になりますね。合わせて参考にさせていただいきます。ありがとうございます。

2014/04/29 17:49:55

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません