命题:
有数字串str,str[i]的前缀和为sum[i],若(sum[a] mod 3) == (sum[b] mod 3),则子串(a, b]为3的倍数
证明:
当sum[i] mod 3 == 0时,sum[i]为3的倍数;若有sum[j] mod 3 == 0(j >= i),则sum[j]也为3的倍数,那么sum[j] - sum[i]也为3的倍数,那么子串(i, j]是3的倍数。
当sum[i] mod 3 != 0时,设sum[i] mod 3 == k, (k != 0),那么sum[i]可以表示为3a+k,若有sum[j] mod 3 == k (j >= i,k != 0),则sum[j]可表示为3b+k,那么sum[j] - sum[i] = (3b+k) - (3a+k) = 3(b-a),是3的倍数。
摘自:https://blog.youkuaiyun.com/izayoi_w/article/details/97628213