思路:处理每一位右边第一组互质的数的右边数的位置,O(1)处理查询;
我们先处理对于一个数右边第一个与它互质的数
从n->1开始
对于每一个数 对其进行素因数分解,记录每一个素数被那些数所包含
同时二进制标记处理其本身与那些数不互质
最后对i-n取反 找第一个1出现的位置,就是右边与它互质的第一个数的位置
这样我们处理完了右边第一个和它互质数的位置,
对于第i个数 右边第一对互质的数的右边数的位置应是 min(ans[i],ans[i+1],....ans[n]);
如果n->1跑的的 就可以写成min(ans[i],ans[i+1]) ps:处理i时i+1已经处理结束;
这样就可以O(1)处理答案了
#include #include #include #include #include #include #include #include #include