http://www.spoj.com/problems/SQFREE/
求出1~n(n <= 10^14)内不被任意一个完全平方数整除的数的个数。
同样的,考虑问题的逆问题,就是至少能被一个完全平方数整除的数的个数。所以答案就是 n - ( 1~n内完全平方数的倍数的个数 )。
所以可以枚举i( 2 <= i <= sqrt(n) ),i*i是一个完全平方数,那么能被i*i整除的数的个数为 n / (i*i)。显然里面有重复的,例如4,9,和36,
36就被多计算的一次,所以减掉,就是容斥。 和上题类似,看i的质因子数是奇数还是偶数,是奇数就加上,偶数就减掉,注意i的质因子不能有重复的。