llModPowっていうのもあるんっすけど、
関数に設定されたディレイは脅威の1.0秒っす。
頻繁に使うものではないんっすけど、1.0秒は問題アリっす。
どうもぺんぎんっす( ◎v◎ )
タイムはディレイの関係もあって圧勝っす。
下のをそのまま使うと、だいたい102.7秒 vs 0.025秒っすね。
ケタが違うっす。
100回は少ないと思われるかも知れないっすけど、
誰かがTPしてきたりすると結果も違ってくるもんっすから、
ほぼ一定の条件で可能な2,3分でやりたかったわけっす。
ディレイなしとしても2.7秒 vs 0.025秒で100倍違うっすね。
あ、前置きが長くなったっすね。
下がコードっす。(テストコード含む)
pmModPowはllModPowと同じカタチっすから、
問題なく使えると思うっす。
integer pmModPow(integer a, integer b, integer c) // べき剰余を返す
{
// a 底
// b 指数
// c 法
integer result = 1;
while(b > 0)
{
if((b & 1) == 1)
{
result = (result * a) % c;
}
b = b >> 1;
a = (a * a) % c;
}
return result;
}
default
{
// 以下テスト
touch_start(integer num_detected)
{
integer test_a = 5;
integer test_b = 7;
integer test_c = 31;
integer i;
llResetTime();
for(i = 0; i < 100; i++)
{
llModPow(test_a, test_b, test_c);
}
llOwnerSay("llModPow time:" + (string)llGetTime());
llResetTime();
for(i = 0; i < 100; i++)
{
pmModPow(test_a, test_b, test_c);
}
llOwnerSay("pmModPow time:" + (string)llGetTime());
}
}
0 件のコメント:
コメントを投稿