T1 GCD

数学水题。。。

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

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

#include <cstdio>
#include <cmath> const int MAXN = 1e7 + 5;
int num[MAXN], len = 0;
bool flag[MAXN];
int vis[MAXN]; typedef long long LL; void euler(int n) { // 欧拉筛
for(int i = 2; i <= n; i++) {
if(!flag[i]) {
num[++len] = i;
int t = 1;
while((LL)t * i <= n) { // 暴力枚举次方
t *= i;
vis[t] = i; // 记录这个次方对应的质数
flag[t] = true;
}
}
for(int j = 1; j <= len; j++) {
if(i * num[j] > n)
break;
flag[i * num[j]] = true;
if(i % num[j] == 0)
break;
}
}
return ;
} int main() {
int m, n;
scanf ("%d %d", &m, &n);
euler(n);
LL ans = 0;
flag[1] = true;
for(int i = m; i <= n; i++) {
if(i == 1) // 排除1的情况
continue;
if(!flag[i]) // 是质数
ans += i; // (所有除1之外的因数的GCD即是本身
else if(vis[i]) // 如果是质数的某个次方
ans += vis[i]; // 加上那个对应的质数
else // 否则这个数有两个及以上的质因子,加一即可
ans++;
}
printf("%lld\n", ans);
return 0;
}

T2 包含

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

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

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

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

int t = x;
while(t) {
vis[t] = true;
t = (t - 1) & x;
}

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

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

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

Q: 1 0 0 0 1 0 0 1
1. ^
2. ^
3. ^ ^
4. ^
5. ^ ^
6. ^ ^
7. ^ ^ ^
#include <cstdio>

const int MAXN = 1000005;
bool vis[MAXN]; int main() {
int n, m;
scanf ("%d %d", &n, &m);
for(int i = 1; i <= n; i++) {
int x;
scanf ("%d", &x);
if(vis[x])
continue;
int t = x;
while(t) {
vis[t] = true;
t = (t - 1) & x;
}
}
while(m--) {
int x;
scanf ("%d", &x);
if(vis[x])
printf("yes\n");
else
printf("no\n");
}
return 0;
}

最新文章

  1. iOS 读取大文件时候的注意点
  2. Word,PDF,PPT,TXT之间的转换方法
  3. 怎么查询电脑ip地址
  4. NYOJ之括号配对问题
  5. Golang redigo hmset hset 问题
  6. 解决Eclipse Debug 的source not found问题
  7. eclipse不正常编译导致错误:Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
  8. UISearchDisplayController隐藏navigationBar需注意
  9. 获取腾讯soso地图坐标代码
  10. Oracle新建用户、角色,授权,建表空间
  11. Java 编译解释
  12. python数据类型-布尔值
  13. iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏
  14. UVa 10814 - Simplifying Fractions
  15. Linux 基础(3)
  16. Creating beautiful charts in chinese with ggplot2
  17. myEclipse配置SVN
  18. RabbitMQ入门:认识并安装RabbitMQ(以Windows系统为例)
  19. mongodb第二篇文章~关于集群认证的那点事
  20. 使用android-ndk官方ndkbuild例子

热门文章

  1. linux系统软件启动sh脚本
  2. SpringBoot第五集:整合监听器/过滤器和拦截器(2020最新最易懂)
  3. python重要第三方库pandas加载数据(详解)
  4. UML类图关系表示
  5. Flink基础:实时处理管道与ETL
  6. 打包项目成war包并部署到服务器上,项目运行一直显示加载中
  7. Linux下端口被占用,关掉端口占用的方法
  8. C语言I博客作业3
  9. 基于云开发 CloudBase 搭建在线视频会议应用教程
  10. MySQL索引结构之B+树索引(面)