• UVa 12716 (GCD == XOR) GCD XOR


    题意:

    问整数n以内,有多少对整数a、b满足(1≤b≤a)且gcd(a, b) = xor(a, b)

    分析:

    gcd和xor看起来风马牛不相及的运算,居然有一个比较"神奇"的结论:

    设gcd(a, b) = xor(a, b) = c, 则 c = a - b

    这里

    有比较严格的证明。

    有了这个结论后,我们可以枚举约数c,然后枚举c的倍数a,再根据c = a - b计算b,检验b是否满足gcd(a, b) = xor(a, b)

     1 #include <cstdio>
     2 const int maxn = 30000000;
     3 int ans[maxn + 10];
     4 
     5 int main()
     6 {
     7     //freopen("12716in.txt", "r", stdin);
     8 
     9     for(int c = 1; c <= maxn; c++)
    10     {
    11         for(int a = 2*c; a <= maxn; a += c)
    12         {
    13             int b = a - c;
    14             if((a ^ c) == b) ans[a]++;
    15         }
    16     }
    17     for(int i = 1; i <= maxn; ++i) ans[i] += ans[i-1];
    18 
    19     int T, n;
    20     scanf("%d", &T);
    21     for(int kase = 1; kase <= T; ++kase)
    22     {
    23         scanf("%d", &n);
    24         printf("Case %d: %d
    ", kase, ans[n]);
    25     }
    26 
    27     return 0;
    28 }
    代码君
  • 相关阅读:
    匿名函数
    内置函数
    基础函数--3
    基础函数(2)
    基础函数(1)
    文件的相关操作
    知识点补充,set集合,深浅copy
    is 和 ==的区别
    Django-form组件中过滤当前用户信息
    Django的常用模块引入整理
  • 原文地址:https://www.cnblogs.com/AOQNRMGYXLMV/p/4162682.html
Copyright © 2020-2023  润新知