intersector := proc(b::posint, px::posint, py::posint, fx::integer, fy::nonnegint, s::integer, m::posint) local i, z1, z2, period, preperiod, residues_z1, residues_z2; period, preperiod := calcperiod([1], [b, 0], m); z1[0] := 1 mod m; for i from 1 to preperiod+period-1 do z1[i] := b*z1[i-1] mod m; end do; residues_z1 := {seq(z1[i], i=preperiod..preperiod+period-1)}; period, preperiod := calcperiod([s*fy, s*(fx*py+fy*px)], [2*px, -1, 0], m); z2[0] := s*fy mod m; z2[1] := s*(fx*py+fy*px) mod m; for i from 2 to preperiod+period-1 do z2[i] := 2*px*z2[i-1] - z2[i-2] mod m; end do; residues_z2 := {seq(z2[i], i=preperiod..preperiod+period-1)}; return residues_z1 intersect residues_z2; end;