UVa 12716 - GCD XOR

来源:互联网 发布:淘宝王成勇培训靠谱吗 编辑:程序博客网 时间:2024/05/29 16:24

打表出几个数据后会发现如果 a ^ b == gcd(a, b) == c, 那么 b == a - c。类似筛法选素数, 求出所有符合条件的c即可。

这道题要打表,不然会TLE。

#include <cstdio>const int maxv = 30000000;int C[maxv];void sov() {    for(int c = 1; c <= maxv / 2; c++) {        for(int i = 2; i * c <= maxv; i++) {            int a = i * c;            int b = a - c;            if(c == (a ^ b)) C[a]++;        }    }    for(int i = 1; i <= maxv; i++)        C[i] += C[i - 1];}int main() {    int T, Case = 0;    sov();    scanf("%d", &T);    while(T--) {        int N;        scanf("%d", &N);        printf("Case %d: %d\n", ++Case, C[N]);    }    return 0;}


0 0