UVA 12716 - GCD XOR

这个题真麻烦啊。  看着书上的思路好不容易 写出 n* logn的算法。 交上去还超时。


这个题 就是满足两个条件  c = a - b, c = a^b  真不容易 写出来。


这个题需要的是模拟c 然后 c是a的约数 根据c可以 求a   


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define ll long long
typedef unsigned long long ull;
#define maxn 30000000
#define INF 1<<30
int s[30000000+10];
int init(){
    int sum = 0;
    for(int c = 1; c <= maxn/2; c++){
        for(int a = c+c ; a <= maxn ; a += c){
            int b = a - c;
            if((a ^ b) == c)
                s[a]++;           // a  所满足的所有可能。 因为 a < n  在求 n的时候 要把前n项全部加起来
        }
    }
    for(int i = 2; i <= maxn; i++)
        s[i] += s[i-1]; 
}
int main (){
    int counts = 0,num;
    scanf("%d",&num);
    init();
    while(num--){
        int n;
        scanf("%d",&n);
        printf("Case %d: %d\n",++counts,s[n]);
    }
    return 0;
}


你可能感兴趣的:(数学)