如果i%Prime[j]==0,即i=t*Prime[j]。
当标记 i*Prime[j+1] 时,
i*Prime[j+1]这个数并不是最小质因子与最大剩余因子的乘积的形式,
因为i可以被拆成t*Prime[j],说明Prime[j+1]不是这个数的最小质因子(Prime是升序数组),
i*Prime[j+1]这个数应该被拆成 (t*Prime[j+1])*Prime[j],
这样才是最小质因子与最大剩余因子的乘积的形式,
其中最小质因子为Prime[j],最大剩余因子为t*Prime[j+1],
也就是说 i*Prime[j+1] 这个数将在循环遍历到 i=t*Prime[j+1] 时被标记。
同理,当标记 i*Prime[j+k]时,
i*Prime[j+k]这个数并不是最小质因子与最大剩余因子的乘积的形式,
因为i可以被拆成t*Prime[j],说明Prime[j+k]不是这个数的最小质因子(Prime是升序数组),
i*Prime[j+k]这个数应该被拆成 (t*Prime[j+k])*Prime[j],
…
也就是说 i*Prime[j+k] 这个数将在循环遍历到 i=t*Prime[j+k] 时被标记。
所以一旦i%Prime[j]==0,i就可以被拆成t*Prime[j],
不再满足数拆分成最小质因子与最大剩余因子的乘积的形式,
就break退出该层循环。
也就是说,如果一个数被标记,那肯定是由它的最小质因子与最大剩余因子的乘积标记的,这是标记的唯一性。
又因为任何一个大于1的整数都可以唯一分解成有限个质数的乘积,而Prime保存了当前发现的所有质数,
当计算进行下去,所有范围的数都可以被分解成***形式,这是标记的无遗漏性。
真是合情合理。