题意:输入整数n(1<=n<=3千万),有多少对整数(a,b)满足:1<=b<=a<=n,且gcd(a,b)=a XOR b。例如:n=7时,有4对:(3,2),(5,4),(6,4),(7,6)。

思路分析 : 对于这个问题, gcd(a, b)  = c , 则 a ^ c = b , 那么c 一定是 a 的约数,根据这个我们是不就可以去枚举 c 和 a ,类似于素数筛的方法,复杂度是 O(n*logn) 的。对于枚举的 a 和 c 我们都可以计算 出来 b ,然后在用 gcd(a, b) 去核验一下,总的复杂度是 n*(logn)^2 ,会 T

这里如果我们对小数据进行打表的话,会发现一个规律,就是  c = a - b, 这样的话总的复杂度就会降为 n*logn ,这样提前预处理一遍就可以

至于这个地方要怎么证明,我们显然知道的一个 关系式 a - b <= a^b ,a - b >= c ,则由 a-b = c

代码示例 :

#define ll long long
const ll maxn = 3e7;
const ll mod = 1e9+7;
const double eps = 1e-9;
const double pi = acos(-1.0);
const ll inf = 0x3f3f3f3f; ll n;
ll gcd(ll a, ll b){
return b==0?a:gcd(b,a%b);
}
ll cnt[maxn+5];
void init(){
for(ll i = 1; i <= maxn/2; i++){ // c
for(ll j = i*2; j <= maxn; j += i){ // a
ll b = i^j; if (b == 0 || b > j) continue;
ll fc = abs(j-b);
//ll fc = gcd(b, j);
if (i == fc){
cnt[j]++;
// printf("*** %lld %lld %lld\n", j, b, fc);
}
}
}
for(ll i = 1; i <= maxn; i++) cnt[i] += cnt[i-1];
} int main() {
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
ll t;
ll kase = 1;
init();
//for(ll i = 1; i <= 10; i++) printf("%lld ", cnt[i]);
cin >> t;
while(t--){
cin >> n;
printf("Case %lld: %lld\n",kase++, cnt[n]);
}
return 0;
}

最新文章

  1. ASP.NET Core 之 Identity 入门(一)
  2. IOS网络第七天WebView-02WebView和网页的交互2,删除大众点评多余文字,加上蒙版进度
  3. 《SharePoint 2013 应用开发实战》目录
  4. 【GoLang】GoLang 微服务、开源库等参考资料
  5. Insert select 带选择复制一张表到另一张表
  6. C逻辑型变量——时控灯例子
  7. codeforces Gym 100187H H. Mysterious Photos 水题
  8. C++如何屏蔽双击运行程序功能?
  9. 华为AR1220新机试用
  10. git相关的学习资料
  11. win10 uwp 自定义控件初始化
  12. JDBC 查询
  13. TextView文字描边实现
  14. LeetCode算法题-Missing Number(Java实现-四种解法)
  15. php常用扩展安装
  16. redis map存储的注意点
  17. loli的搜索测试-5
  18. a标签属性 rel=noopener noreferrer
  19. 如何使用jpegtran 压缩JPG图片
  20. Jfinal本地eclipse+tomcat运行项目时候遇到错误Exception starting filter

热门文章

  1. 【a403】遍历树问题
  2. python基础十五之递归函数
  3. 人脸检测MTCNN的训练过程(PRO网络)
  4. H3C DNS简介
  5. tf.contrib.learn.preprocessing.VocabularyProcessor()
  6. H3C 端口隔离配置举例
  7. Spark in action Spark 以及SparkR的安装配置说明
  8. 51nod 范德蒙矩阵
  9. java.util.Date和jdk1.8新时间API比拼
  10. [转载]sublime用法精华