UVa12716 - GCD XOR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa12716 - GCD XOR相关的知识,希望对你有一定的参考价值。

题意

给一个数n,找出gcd(a,b) = a^b的个数   (1<=b<=a<=n)。

n的数据范围:1到30000000

思路

c满足gcd(a,b) = a^b,打表观察数据得出c = a - b;又因为c是a的约数,用类似素数筛选的方法降低时间复杂度。

总结

敲代码的时候忘记打表这个东西的存在,只要一次性将所有的结果算出存在数组里,每次提取就可以,不用每次都算一遍。

智障啊_(:з」∠)_为什么想不到,不然又可以A一道题

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
typedef long long LL;
const LL maxn = 30000005;
using namespace std;
LL ans[maxn];
LL T, kase = 0, n;
void solve()
{
    for(int i = 1; i <= maxn; i++)
        for(int j = i+i; j <= maxn; j+=i)
            if((j^(j-i)) == i) ans[j]++;
    for(int i = 2; i <= maxn; i++)
        ans[i] += ans[i-1];
}
int main()
{
    //freopen("in.txt","r",stdin);
    solve();
    cin >> T;
    while(T--) {
        cin >> n;
        cout << "Case " << ++kase << ": " << ans[n] << endl;
    }
    return 0;
}

 

以上是关于UVa12716 - GCD XOR的主要内容,如果未能解决你的问题,请参考以下文章

uva12716GCD XOR

GCD等于XOR GCD XOR uva12716

UVA12716 GCD XOR

UVA12716 GCD等于XOR GCD XOR 数论

UVA 12716 GCD XOR(数论+枚举+打表)

UVA 12716 GCD XOR (异或)