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

E. Rasta Thamaye Dilo

链接:[https://codeforces.com/gym/104679/problem/E?adcd1e=caf4fedm9escdm&csrf_token=062b3628aaa43205c694e16f77dbe6ec]
题意:
村庄=点
路=点与点的连线
1.有t组数据,每组给一个数字n,问可以从一点走到任意一点需要建的最小路数。
2.i和j之间可以整除,则i,j之间已经有路。

题解:根据2.找从2~n有几个不连通的堆。

  • 两个质数堆会由他们的公倍数连成一堆,质数会与其倍数连成一堆,其中有交叉,最早的交叉出现在2倍时。
  • 2*n是2与n的公倍数,这说明2和前n个数(包括n)连成一堆,即前n个质数为一堆。
    ans=总质数-前n质数连成一堆;

故解题流程为
1.埃氏筛选法记录质数
2.前缀和记录前n个质数个数
3.prefix[n]-prefix[n/2]即为要建立的最小数

特判:当n=2时,只有一个点,不需要路,ans=0;
当n=3时,只有两个质数用一条线连接即可
`#include

include

using namespace std;
const int M = 1e7;
int main()
{
vectorprime(M + 1, 1);
prime[0] = 0, prime[1] = 0;
for (int i = 2;i <= M;i++) {
if (prime[i]) {
for (int j = 2 * i;j <= M;j+=i) {
prime[j] = 0;
}
}
}
for (int i = 1;i <= M;i++) {
prime[i] += prime[i - 1];
}
cout << prime[6];
int t;
cin >> t;
while (t--) {
int m;
cin >> m;
if (m <= 3) cout << m - 2 << endl;
else
cout << prime[m] - prime[m / 2] << endl;
}
return 0;
}`

http://www.hskmm.com/?act=detail&tid=26892

相关文章:

  • 微信机器人开发最新协议API
  • JDK的安装与使用 - XYX
  • Rust 的英文数字验证码识别系统实现
  • 微信机器人制作教程+源码
  • 基于 Rust 的英文数字验证码识别系统实现
  • 使用 Fortran 实现英文数字验证码识别系统
  • 初来乍到,发篇博客试试功能
  • 国庆集训游记
  • P11967 [GESP202503 八级] 割裂
  • 用 Ada 实现英文数字验证码识别
  • P11380 [GESP202412 八级] 排队
  • 数据增强操作
  • HTML5实现简洁的端午节节日网站源码 - 实践
  • Visio的图片,粘到word中显示不全,右边和下面显示不出来
  • 25国庆总结
  • 某平台增强排序脚本
  • 印度乡村AI计划:用JAN AI打造人工智能优先村庄
  • # Java方法学习:动手动脑与课后实验整理
  • CF2155D Batteries
  • JAVA语法基础》动手动脑与实验问题全整理
  • 崩铁壁纸
  • PotPlayer 播放器
  • 10.8动手动孬
  • [迷宫寻路 Round 3] 七连击
  • 《程序员修炼之道:从小工到专家》阅读笔记
  • [笔记]树论笔记+做题记录
  • 云服务器部署大数据组件
  • 规模化网站SSL证书终极方案
  • 详细介绍:录制mp4
  • 10月8日