T1 GCD

数学水题。。。

对于每个数,如果这个数有两个及以上的质因数的话,它所有除 \(1\) 之外的因数求 \(GCD\) 的值一定为 \(1\)。那么判断是否是质数或质数的次方即可(质数除 \(1\) 之外的因数只有它本身,而质数的次方除 \(1\) 之外的质因数只有一个,故不存在两个及以上的质因数。

再来考虑特殊的是质数的次方 \(x^n\) 的情况,它除 \(1\) 之外的因数一定只有 \(x\),所以得出这个质数并累加答案即可。那就跑欧拉筛的时候边跑边暴力更新呗。

  1. #include <cstdio>
  2. #include <cmath>
  3. const int MAXN = 1e7 + 5;
  4. int num[MAXN], len = 0;
  5. bool flag[MAXN];
  6. int vis[MAXN];
  7. typedef long long LL;
  8. void euler(int n) { // 欧拉筛
  9. for(int i = 2; i <= n; i++) {
  10. if(!flag[i]) {
  11. num[++len] = i;
  12. int t = 1;
  13. while((LL)t * i <= n) { // 暴力枚举次方
  14. t *= i;
  15. vis[t] = i; // 记录这个次方对应的质数
  16. flag[t] = true;
  17. }
  18. }
  19. for(int j = 1; j <= len; j++) {
  20. if(i * num[j] > n)
  21. break;
  22. flag[i * num[j]] = true;
  23. if(i % num[j] == 0)
  24. break;
  25. }
  26. }
  27. return ;
  28. }
  29. int main() {
  30. int m, n;
  31. scanf ("%d %d", &m, &n);
  32. euler(n);
  33. LL ans = 0;
  34. flag[1] = true;
  35. for(int i = m; i <= n; i++) {
  36. if(i == 1) // 排除1的情况
  37. continue;
  38. if(!flag[i]) // 是质数
  39. ans += i; // (所有除1之外的因数的GCD即是本身
  40. else if(vis[i]) // 如果是质数的某个次方
  41. ans += vis[i]; // 加上那个对应的质数
  42. else // 否则这个数有两个及以上的质因子,加一即可
  43. ans++;
  44. }
  45. printf("%lld\n", ans);
  46. return 0;
  47. }

T2 包含

显然如果用n方的算法会卡到飞起。。。(右边巨佬考场 DFS 记忆化过掉了呢

考虑优化。我们在每一次输入的时候更新一下有哪些数 \(\&\) 上这个数等于内个数本身。记这个集合内的数为 \(Q\),即是寻找有哪些 \(X\) 满足 \(Q \& X = X\)。

对于一个 \(Q \& X = X\),在二进制数位中 \(X\) 等于 \(1\) 的位,对应的 \(Q\) 中的位一定等于 \(1\),但因为 \(Q\) 是确定的,所以我们考虑依次替换掉 \(Q\) 二进制当中等于 \(1\) 的位,将其改为 \(0\),枚举所有情况即是找到了所有的 \(X\)。

至于如何枚举 \(Q\) 中为 \(1\) 的位……芜湖起飞。

  1. int t = x;
  2. while(t) {
  3. vis[t] = true;
  4. t = (t - 1) & x;
  5. }

就是上述代码,最好在草稿纸上手推一下,不然很难理解。

为此我还和JC讨论了好久。

结论:上述代码按以下顺序枚举为 \(1\) 的位改其为 \(0\)。

  1. Q: 1 0 0 0 1 0 0 1
  2. 1. ^
  3. 2. ^
  4. 3. ^ ^
  5. 4. ^
  6. 5. ^ ^
  7. 6. ^ ^
  8. 7. ^ ^ ^
  1. #include <cstdio>
  2. const int MAXN = 1000005;
  3. bool vis[MAXN];
  4. int main() {
  5. int n, m;
  6. scanf ("%d %d", &n, &m);
  7. for(int i = 1; i <= n; i++) {
  8. int x;
  9. scanf ("%d", &x);
  10. if(vis[x])
  11. continue;
  12. int t = x;
  13. while(t) {
  14. vis[t] = true;
  15. t = (t - 1) & x;
  16. }
  17. }
  18. while(m--) {
  19. int x;
  20. scanf ("%d", &x);
  21. if(vis[x])
  22. printf("yes\n");
  23. else
  24. printf("no\n");
  25. }
  26. return 0;
  27. }

牛客 2020.10.20 TG 前两题的更多相关文章

  1. 2020牛客多校第八场K题

    __int128(例题:2020牛客多校第八场K题) 题意: 有n道菜,第i道菜的利润为\(a_i\),且有\(b_i\)盘.你要按照下列要求给顾客上菜. 1.每位顾客至少有一道菜 2.给顾客上菜时, ...

  2. 牛客网数据库SQL实战解析(51-61题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  3. 牛客网数据库SQL实战解析(41-50题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  4. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  5. 牛客网数据库SQL实战解析(31-40题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  6. 牛客网数据库SQL实战解析(21-30题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  7. 牛客网数据库SQL实战解析(11-20题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  8. 牛客网数据库SQL实战解析(1-10题)

    牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...

  9. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

随机推荐

  1. MVC框架的代码审计小教程

    介绍 YxtCMF在线学习系统是一个以thinkphp+bootstrap为框架进行开发的网络学习平台系统. 在线学习系统,为现代学习型组织提供了卓有成效的学习与培训方案, 能够通过在线学习和在线评估 ...

  2. Python期中考试程序设计题详解-2

    一.请使用turtle库的turtle.pencolor().turtle.seth().turtle.fd()等函数,绘制一个边长为200的红色等边三角形. 题目解析: (1)本题利用turtle画 ...

  3. oracle truncate table recover(oracle 如何拯救误操作truncate的表)

     生产上肯定是容易脑袋发热,truncate一张表,立马的心跳加速,眼神也不迷糊了,搞错了,完了-- 那么,truncate表后,能不能进行恢复? truncate操作是比较危险的操作,不记录redo ...

  4. go beego框架 入门使用 (一)

    ---恢复内容开始--- 谢谢您花时间读我写的随笔,有问题的话欢迎留言,看到的话都会回复的! beego框架 分为Web版,Api版     api版目录      web版目录      (区别 : ...

  5. c#导入文件以后查看制定值

    //Console.ReadKey(); ceshi("3.ini", "用户名"); ceshi("3.ini", "IP地址& ...

  6. leetcode68-search-in-rotated-sorted-array-ii

    题目描述 继续思考题目 "Search in Rotated Sorted Array": 如果数组种允许有重复元素怎么办? 会影响时间复杂度吗?是怎样影响时间复杂度的,为什么? ...

  7. display:none;visibility:hidden;opacity:0;之间的区别

    什么是回流 当render tree中的一部分(或全部)因为元素的规模尺寸,布局,隐藏等改变而需要重新构建.这就称为回流(reflow).每个页面至少需要一次回流,就是在页面第一次加载的时候,这时候是 ...

  8. mdp文件-Chapter4-MD.mdp

    终于到了mdp系列的第四篇,最终MD模拟的mdp文件 先上代码,md.mdp 1 title = OPLS Lysozyme MD simulation 2 ; Run parameters 3 in ...

  9. waf 引擎 云原生平台tproxy 实现调研

    了解了基本 云原生架构,不清楚的查看之前的文章:https://www.cnblogs.com/codestack/p/13914134.html 现在来看看云原生平台tproxy waf引擎串联实现 ...

  10. nginx&http 第五章 https non-fd 读写检测

    EPOLL的LT/ET 模式下的读写 从一个非阻塞的socket上调用recv/send函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK)从字面上看, ...