[51nod异或约数和] 整除分块+打表找规律

  • emm。首先我想到一个nlog2nn*log_2 n的算法,就是对于每一个数,枚举它的倍数,然后筛一下。35分get。
  • 诶,在计算总答案的公式中,一个数被异或的时候,肯定是被作为约数的时候。那么一个数被异或的次数肯定是ni\frac{n}{i}。如果为奇数,就把它异或上,不然就不管。O(n)O(n)算法,45分美滋滋。
  • 嗯?ni\frac{n}{i}?整除分块搞一下是不是就n\sqrt n了啊。哦,但是它好像涉及到一个求连续区间的异或和问题,我们需要O(1)O(1)。转化一下,lrl到r的区间异或和等于11l1l-1的异或和^11rr的异或和。从1到n的异或和怎么O(1)O(1)求?打表找规律!
  • f(n)f(n)为1到n的异或和,则:
    if(n mod 4=1), f(n)=1if(n~ mod~4=1),~f(n)=1
    if(n mod 4=2), f(n)=n+1if(n~mod~4=2),~f(n)=n+1
    if(n mod 4=3), f(n)=0if(n~mod~4=3),~f(n)=0
    if(n mod 4=0), f(n)=nif(n~mod~4=0),~f(n)=n
  • 盗一下某人的证明:
    证明:

我们先来考虑f(2k,2k+11)f(2^k,2^{k+1}-1)

2k2^k2k+112^{k+1}-12k2^k个数,最高位的一个数为2k2^k

若有k>=1k>=1,则2k2^k为偶数,将这2k2^k个数的最高位去掉,异或和不变

因此f(2k,2k+11)=f(2k2k,2k+12k1)=f(0,2k1)f(2^k,2^{k+1}-1)=f(2^k-2^k,2^{k+1}-2^k-1)=f(0,2^{k}-1)

因而存在f(0,2k+11)=f(0,2k1)xorf(2k,2k+11)=0f(0,2^{k+1}-1)=f(0,2^k-1) xor f(2^k,2^{k+1}-1)=0

f(0,2k1)=0f(0,2^k-1)=0

对于f(0,n)n4,f(0,n),n\geq4设n二进制表示的最高位1在第k位k>=2;

f(0,n)=f(0,2k1)xorf(2k,n)=f(2k,n)f(0,n)=f(0,2^k-1) xor f(2^k,n)=f(2^k,n)

对于2k2^knnn2k+1n-2^k+1个数,最高位共有m=n2k+1m=n-2^k+1个1,去除最高位的1

当n为奇数时,m为偶数此时有f(0,n)=f(2k,n)=f(0,n2k)2kf(0,n)=f(2^k,n)=f(0,n-2^k)|2^k

由于n2kn-2^k与n奇偶性相同,递推上面的公式可得f(0,n)=f(0,n2k2k12k222)=f(0,n%4)f(0,n)=f(0,n-2^k-2^{k-1}-2^{k-2}\cdots -2^2)=f(0,n\%4)

n%4=1n\%4=1f(0,n)=f(0,1)=1f(0,n)=f(0,1)=1

n%4=3n\%4=3f(0,n)=f(0,3)=0f(0,n)=f(0,3)=0

当n为偶数时,m为奇数,因而f(0,n)=f(2k,n)=f(0,n2k)xor2kf(0,n)=f(2^k,n)=f(0,n-2^k)xor2^k

也相当于最高位不变,递推公式可得

f(0,n)=f(0,n%4)xor2kxorf(0,n)=f(0,n\%4)xor 2^kxor n[k]2k1xorn[k]*2^k-1 xor\cdots n[2]22n[2]*2^2

n[k]表示n的二进制表示的第k位

显然当n为偶数时 f(0,n)f(0,n)的二进制从最高位到第3位和n的二进制表示相同

此时我们只需要判断第二位

n%4=0n\%4=0f(0,n)=nf(0,n)=n

n%4=2n\%4=2f(0,n)=n+1f(0,n)=n+1

综上所述:

f(0,n)=f(1,n){n       n%4=01       n%4=1n+1n%4=20       n%4=3f(0,n)=f(1,n)\begin{cases} n\ \ \ \ \ \ \ \quad n\%4=0\\ 1\ \ \ \ \ \ \ \quad n\%4=1\\n+1 \quad n\%4=2\\0\ \ \ \ \ \ \ \quad n\%4=3\\ \end{cases}

相关文章:

  • 2021-09-25
  • 2021-07-07
  • 2021-12-20
  • 2022-01-04
  • 2022-12-23
  • 2021-08-13
  • 2021-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-03
  • 2021-10-25
  • 2021-09-21
  • 2022-01-19
相关资源
相似解决方案