2008年06月25日
エラトステネスの篩
というのは エラトステネスの篩 - Wikipedia
-----
に説明があるけれど 素数を求める方法
-----
昨日 purin に lsl の wiki のサンプル入れてみたら勉強になる と言ったら いいね~ と言っていたので これシリーズ化するかも w
-----
今回は LSL NSieve Benchmark - Second Life Wiki にあるのを入れてみたよ
-----
ベンチマーク方法の勉強にもなりそうだ
-----
-----
装着すると即起動して こうなる
-----
篩自体は文字列配列でできてるみたいだね
-----
128 までの 素数は 31個で 約5秒かかったってことかな w
-----
すぐ試せるようリストもあげとくよ w
-----
に説明があるけれど 素数を求める方法
-----
昨日 purin に lsl の wiki のサンプル入れてみたら勉強になる と言ったら いいね~ と言っていたので これシリーズ化するかも w
-----
今回は LSL NSieve Benchmark - Second Life Wiki にあるのを入れてみたよ
-----
ベンチマーク方法の勉強にもなりそうだ
-----
-----
装着すると即起動して こうなる
-----
篩自体は文字列配列でできてるみたいだね
-----
128 までの 素数は 31個で 約5秒かかったってことかな w
-----
すぐ試せるようリストもあげとくよ w
//
// File: NSieve.lsl
// Date Author number of nodes
// 2008/6/25 walkinglint 56
//
//
// The Great Computer Language Shootout
// http://shootout.alioth.debian.org/
//
// contributed by Isaac Gouy
// modified by Babbage Linden
//
// http://wiki.secondlife.com/wiki/LSL_NSieve_Benchmark
string setByteArray(integer numbytes) {
string result = "";
integer i;
for (i = 0; i < numbytes; ++i) {
result += "1";
}
result += "1";
return result;
}
string replace(string s, integer index, string char) {
string result = "";
if (index >= 1) {
result += llGetSubString(s, 0, index - 1);
}
result += char;
if (index < (llStringLength(s) - 1)) {
result += llGetSubString(s, index + 1, -1);
}
return result;
}
integer get(string s, integer index) {
return llGetSubString(s, index, index) == "1";
}
string set(string s, integer index) {
return replace(s, index, "1");
}
string unset(string s, integer index) {
return replace(s, index, "0");
}
test() {
integer m = 128;
string bytes = setByteArray(m);
integer count = 0;
integer i;
for (i = 2; i <= m; i++) {
if (get(bytes, i)) {
integer k;
for (k = i + i; k <= m; k += i) {
bytes = unset(bytes, k);
}
count++;
}
}
llSay(0, "Primes up to " + (string)m + " " + (string)count);
}
time() {
llResetTime();
llSay(0, "Starting tests...");
test();
llSay(0, "Finished tests in " + (string)llGetTime() + "s");
}
default {
state_entry() {
time();
}
touch_start(integer num) {
time();
}
}
Posted by walkinglint at 12:38│Comments(0)
│walking のスクリプティング講座