当前位置: 首页 > news >正文

每日羊题 (质数筛 + 数学 | 构造 + 位运算)

Problem - E - Codeforces

思路:

一眼质数筛,但是需要发现题目的一些小细节

题目说到 i j 只要满足 i % j == 0 或 j % i == 0 一个就能连边,所以我们直接输出 质数数量 是错的,考虑分成两部分

①. x \leq \frac{n}{2}

对于此部分的所有数 x,我们都能和 2*x 连边,因此这些数不需要额外的边

②.x> \frac{n}{2}

对于此部分的所有数 x,我们只能去往小于 x 的部分连边,因为最小的 2*x 不在 1 ~ n 范围内,那么这部分的质数显然就没有连边,即需要连边

所以答案就是 cnt[n] - cnt[n/2],其中 cnt[i] 代表 1 ~ i 中含有的质数数量

最后特判 n = 2 和 n = 3 这两个会多计算 2 的情况即可

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());vector<int> p;
int nop[10000005];
int cnt[10000005];void init()
{nop[1] = nop[0] = 1;for (int i = 2; i <= 10000000; i++){if(!nop[i]) p.push_back(i);for(int j = 0;j < p.size() && p[j] * i <= 10000000;j++){nop[i * p[j]] = 1;if(i % p[j] == 0) break;}cnt[i] = p.size();}
}void solve()
{int n;cin >> n;if(n == 2){cout << 0 << endl;return;}if(n == 3){cout << 1 << endl;return;}cout << cnt[n] - cnt[n/2] << endl;
}signed main()
{init();cin.tie(0)->sync_with_stdio(0);int t = 1;cin >> t;while (t--){solve();}return 0;
}

Problem - F - Codeforces

思路:

首先一眼就能看出我们选的数只能是 a 的子集,且 b 必须也是 a 的子集,否则无解

所以先特判特殊情况:如果 a == b == 0,那么就只能为 0,如果 b 不是 a 的子集,那么无解

接下来考虑正常情况

如果 a 的二进制位中只含有一个 1,那么此时我们只能填 0 和 a,同时我们肯定不能只填 0,所以必须两个都填,因此 b 必须等于 a 才有解,否则无解

如果 a 的二进制位中含有多余一个 1(假设为 k),那么此时我们能选 2^{k} 个数,同时注意到一个性质,此时这些数的异或和为 0

证明如下:对于任意一个 1,我们都有 2^{k-1} 种可能分配别的位置的数,所以这一位最后异或绝对是 0,而对于每一位我们都有这样的结论,因此最后每一位异或都是 0,所以结果为 0,得证

那么此时如果 b = 0,那么这 2^{k} 个数我们都能选,否则我们就删掉 b,即选剩下 2^{k}-1 个数,显然此时数量是最多的

代码: 

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());void solve()
{int a, b;cin >> a >> b;if ((a & b) != b){cout << "-1\n";return;}if (a == 0 && b == 0){cout << "1\n";cout << "0\n";return;}int cnt = 0;for (int i = 0; i < 31; i++){if (a >> i & 1)cnt++;}if (cnt == 1){if (b == a){cout << "2\n";cout << 0 << " " << a << endl;}else{cout << "-1\n";}return;}vector<int> ans;for (int i = 0; i <= a; i++){if ((a & i) == i){ans.push_back(i);}}if (b == 0){cout << ans.size() << endl;for (int i = 0; i < ans.size(); i++){cout << ans[i] << " ";}}else{cout << ans.size() - 1 << endl;for (int i = 0; i < ans.size(); i++){if (ans[i] == b)continue;cout << ans[i] << " ";}}cout << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(0);int t = 1;cin >> t;while (t--){solve();}return 0;
}

http://www.dtcms.com/a/459301.html

相关文章:

  • 上饶网站建设3ao cc专业a工商登记查询系统官网
  • 汉滨区建设局网网站实用网站推荐
  • 学校建设网站重要性网站建设网
  • 网站开发和编程的联系模板网站 建设教材
  • 网站怎么解析域名宁波seo排名外包公司
  • wordpress账号和站内网泰州网站制作哪家好
  • 服装公司网站策划书前端开发培训中心
  • 免费隐私网站推广appwordpress如何添加链接跳转
  • 汽车网站建设报价网站开发亿码酷流量
  • 网站建设方案项目背景意义wordpress转换为中文版
  • 网站成本新开传奇网站180合击
  • 免费学做美食视频网站购物网站开发的业务需求分析
  • 南昌 网站百度seo软件
  • 为什么网站经常被攻击手机软件商城下载app
  • 游戏ui设计网站wordpress 迅搜
  • 株洲网站平台搭建地方房产网站APP如何做
  • 宜春网站开发公司电话团员团干部如何登录到系统
  • 3d 网站设计制作一个工厂小程序收费
  • 济南智能网站建设电话东莞做网站推广
  • 做网站怎样做关键词挖掘啊爱站网
  • 网站推广的方法和渠道工程建设标准强制性条文最新版本
  • 上海建设摩托车官方网站怎么做微信推广和宣传
  • 网站中文字内容左右切换的js代码网站建设如何获取客户
  • 品牌网站建设设计公司网址二维码生成器
  • 不能访问子目录的网站动漫做暧视频网站
  • 十八个免费的舆情网站做网站用什么空间
  • wordpress做得比较大的网站金蝶财务软件一般多少钱
  • 安徽网站建设价格网站如何进行seo
  • 做毕设的网站万禁止wordpress获取隐私
  • 网页设计与制作实训报告2000字优化seo是什么