UVA-12716 GCD+异或运算性质+约数筛法
GCD XOR Description: 输入一个整数n,有多少对整数(a,b)满足 1≤b≤a≤n, g c d ( a , b ) = = a X O R b gcd(a,b)==a XOR b g c d ( a , b ) = = a X O R b 思路历程: ①暴力循环 时间复杂度 O(n^2 ),毫无疑问会超时。 ②考虑到(虽然自己一开始不知道) a X O R b = c , t h e n aXORb=c,then a X O R b = c , t h e n , a X O R c = b aXORc=b a X O R c = b 令c=gcd(a,b),或者 c 必然是a的约数,所以枚举a,c,用 a XOR c算出b,再检验 gcd(a,b)==c。 时间复杂度O(n logn logn ) ps:一开始还想着用 vector<int> facotr[] 去存储枚举的a的正约数集合,发现编译都通不过(数组太大了) 但是,这样还是TLE。还是得优化。 ③ g c d ( a , b ) ≤ a − b ≤ a X O R b a > b gcd(a,b)≤a-b≤aXORb\qquad a>b g c d ( a , b ) ≤ a − b ≤ a X O R b a > b 令 g c d ( a , b ) = a X O R b = c gcd(a