zoukankan      html  css  js  c++  java
  • uva12716 gcd

    题意:给出N,1<=b<=a<=N,求满足gcd(a,b)=a xor b的pair (a,b)的个数

    有个重要的结论:若gcd(a,b)=a xor b=c,那么b=a-c

    如果一个个求gcd肯定不行。

    令f[i]表示满足条件的pair (a,b)中,a=i的个数

    枚举c,令a是c的所有倍数,求出b=a-c。若b=a xor c那么f[a]++

    最后求f[]的前缀和S[],那么答案就是S[N](要求a<=N啦~)

     1 #include <stdio.h>
     2 #include <string.h>
     3 #define LL long long
     4 #define MX 30000005
     5 
     6 int N,T;
     7 LL S[MX],f[MX];
     8 
     9 int main()
    10 {
    11     memset(f,0,sizeof(f));
    12     for (int c=1;c<=MX;c++)
    13         for (int a=2*c;a<=MX;a+=c)
    14         {
    15             int b=a-c;
    16             if ((a^b)==c)
    17             {
    18                 //printf("%d %d %d %d
    ",a,b,a^b,c);
    19                 f[a]++;
    20             }
    21         }
    22 
    23     S[1]=f[1];
    24     for (int i=2;i<=MX;i++)
    25     {
    26         //printf("%d  ",f[i]);
    27         S[i]=S[i-1]+f[i];
    28     }
    29 
    30     scanf("%d",&T);
    31     for (int times=1;times<=T;times++)
    32     {
    33         scanf("%d",&N);
    34         printf("Case %d: %lld
    ",times,S[N]);
    35     }
    36 
    37     return 0;
    38 }
    View Code

    reference:http://blog.csdn.net/u013451221/article/details/38512091

  • 相关阅读:
    Java基础回顾---JVM&JDK&JRE
    学习
    学习
    学习
    进度
    进度
    毕设进度
    学习进度
    Beta阶段项目总结
    第二阶段冲刺——seven
  • 原文地址:https://www.cnblogs.com/pdev/p/4309479.html
Copyright © 2011-2022 走看看