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

AcWing 4575. Bi数和Phi数

文章目录

  • 题意:
  • 思路:
  • 代码

题意:

就是给你n个数,对于每一个数y你都需要找到一个最小x使得 ϕ ( x ) ≥ y \phi(x) \ge y ϕ(x)y,然后再求一个最小平和。

思路:

其实最开始以来的思路就是二分,我先进行线性筛求出每个数的欧拉函数,然后二分去找到第一个大于等于a[i]的欧拉函数,看起来确实挺合理的,但是题目要求我们找到最小满足条件的x不是最小满足条件的phi(x)。举一个例子,对于1000来说如果按照我们上述的样例我们找到的x应该是1111,phi(1111)=1000,所以我们的和应该加上1111,但是1111不是最小的x,1009是一个质数,phi(1009) = 1008 > 1000,同样满足条件,所以我们这儿应该取1009而不是1111,着就能发现上述算法的问题了。但是我们怎么去找一个满足条件的最小x呢,首先明确一点对于x一定是大于这个数本身的。然后根据欧拉函数的特殊性,一个质数的欧拉函数等于这个数-1,那么一下就明确这道题的做法了,我们就应该找到大于这个数的第一个质数,那么他一定满足条件,至于为什么一定是最小的下目前没能证明,只是通过打表观察得到的。

代码

#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 2e6 + 10;bool st[N];
int p[N], cnt;void get()
{for(int i = 2; i < N; i ++){if(!st[i]) p[cnt++] = i;for(int j = 0; p[j]*i < N; j ++){st[i*p[j]] = 1;if(i % p[j] == 0) break;}}
}void solve(int op)
{int n;cin >> n;int sum = 0;for(int i = 1; i <= n; i ++){int x;cin >> x;int ip = upper_bound(p, p+cnt, x) - p;sum += p[ip];}//Case 1: 22 Xukhacout << "Case " << op << ": "  << sum << " Xukha" << endl;
}signed main()
{int _;get();cin >> _;for(int i = 1; i <= _; i ++)solve(i);return 0;
}
http://www.lryc.cn/news/105036.html

相关文章:

  • 《Federated Unlearning via Active Forgetting》论文精读
  • Java课题笔记~Maven基础知识
  • xcode中如何显示文件后缀
  • SpringBoot使用JKS或PKCS12证书实现https
  • 云原生势不可挡,如何跳离云原生深水区?
  • python的decimal或者叫Decimal,BigDecimal
  • Mac环境变量问题
  • Shell脚本学习-Web服务监控
  • 【ChatGPT】基于WSL+Docker的ChatGPT PLUS共享服务部署
  • 【论文阅读24】Better Few-Shot Text Classification with Pre-trained Language Model
  • 119、Spring容器启动流程是怎样的(配有Spring启动完整流程图)
  • 微信公众号开发学习
  • 【LeetCode】221.最大正方形
  • 生成模型相关算法:EM算法步骤和公式推导
  • Compose手势
  • 【雕爷学编程】Arduino动手做(177)---ESP-32 掌控板2
  • Ubuntu-文件和目录相关命令
  • 显式接口实现(C# 编程指南)
  • element-ui 图片上传 及 quillEditor富文本(图片视频上传)
  • 前端技术Vue学习笔记--002
  • 【RabbitMQ(day4)】SpringBoot整合RabbitMQ与MQ应用场景说明
  • 想了解好用的翻译pdf的软件吗?
  • docker安装nginx并配置SSL
  • 【LeetCode 算法】Reorder List 重排链表
  • MQ面试题3
  • 【Linux命令200例】patch 用于将补丁文件应用到源码中
  • 一起来学算法(邻接矩阵)
  • hadoop与HDFS交互
  • MYSQL 分区如何指定不同存储路径(多块磁盘)
  • 安全加固服务器