引用第3楼ltc于2011-05-26 21:22发表的 :
说一下我的想法(不一定对)
两两求差
两两求差是有道理的,
a 和 b 是两个不相等的数,要求 a%m != b%m
设 b = a + T,则 a%m != b%m 变为
a%m != (a+T)%m
再变为
a%m != ( a%m + T%m )%m
即 T%m 不能为零
即 m 不能是 a和b差值 的约数
// 算法,用筛选法
a. 在[1,最大元素]的区间上,置初值为0
b. 两两求差,将差所在的位置值置1
c. from 2 to 元素中的最大值 step 1,跳着走,如果中途碰到了1,则将其踩过的点(包括之后要踩的点)都置1
d. 在区间上从左到右搜索一个值为0的点