整数
,
に対し,
を満たす整数
があるか
どうか調べたい. 明らかに,
に対して調べればよいので,
次のプログラムが書ける.
/* A が平方剰余なら 1, 非剰余なら 0 を返す */
def q_res(A,P) {
for ( I = 0; I < P; I++ ) {
R = (I^2-A) % P;
if ( R == 0 ) /* みつけた */
return 1;
}
return 0;
}
このプログラムは次のようにも書ける.
def q_res(A,P) {
for ( I = 0; I < P; I++ ) {
R = (I^2-A) % P;
if ( R == 0 )
break;
}
if ( I < P )
return 1;
else
return 0;
}
違いは, 条件を満たす 実は, 見つからなかった場合には I を 1 増やすので I==P となっているが, break で脱出した場合には I は当たり の値のままである. よって上のプログラムで正しく動作する.