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

欧拉计划 Project Euler 69(欧拉总计函数与最大值)题解

欧拉计划 Project Euler 69 题解

  • 题干
    • 欧拉总计函数与最大值
  • 思路
  • code

题干

欧拉总计函数与最大值

小于 n n n且与 n n n互质的正整数的数量记为欧拉总计函数 φ ( n ) \varphi(n) φ(n),例如, 1 、 2 、 4 、 5 、 7 1、2、4、5、7 12457 8 8 8均小于 9 9 9且与 9 9 9互质,因此 φ ( 9 ) = 6 \varphi(9)=6 φ(9)=6

nRelatively Primephi(n)n/phi(n)
2112
31,221.5
41,322
51,2,3,441.25
61,523
71,2,3,4,5,661.1666...
81,3,5,742
91,2,4,5,7,861.5
101,3,7,942.5

可以看出,对于 n ≤ 10 n\leq10 n10,当 n = 6 n=6 n=6 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n取得最大值。
对于 n ≤ 1000000 n\leq1000000 n1000000,求使得 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n取得最大值的 n n n

思路

为了找到在 n ≤ 1000000 n\leq1000000 n1000000范围内使得 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n取得最大值的 n n n,我们需要理解欧拉函数的性质以及表达式 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n

欧拉函数 φ ( n ) \varphi(n) φ(n)计算的是小于或等于 n n n且与n互质的正整数的个数。
φ ( n ) \varphi(n) φ(n)的计算公式与 n n n的素因数分解相关。如果 n = p 1 k 1 p 2 k 2 … p r k r n = p_{1}^{k_{1}}p_{2}^{k_{2}}\dots p_{r}^{k_{r}} n=p1k1p2k2prkr n n n的素因数分解,那么:
φ ( n ) = n ∏ p ∣ n ( 1 − 1 p ) = n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) … ( 1 − 1 p r ) \varphi(n) = n\prod_{p|n}(1-\frac{1}{p}) = n(1-\frac{1}{p_{1}})(1-\frac{1}{p_{2}})\dots (1-\frac{1}{p_{r}}) φ(n)=npn(1p1)=n(1p11)(1p21)(1pr1)
因此 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n可以改写为
n φ ( n ) = n n ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) … ( 1 − 1 p r ) = 1 ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) … ( 1 − 1 p r ) \frac{n}{\varphi(n)} = \frac{n}{n(1-\frac{1}{p_{1}})(1-\frac{1}{p_{2}})\dots (1-\frac{1}{p_{r}})} = \frac{1}{(1-\frac{1}{p_{1}})(1-\frac{1}{p_{2}})\dots(1-\frac{1}{p_{r}})} φ(n)n=n(1p11)(1p21)(1pr1)n=(1p11)(1p21)(1pr1)1
进一步化简为
n φ ( n ) = ( p 1 p 1 − 1 ) ( p 2 p 2 − 1 ) … ( p r p r − 1 ) \frac{n}{\varphi(n)} = (\frac{p_{1}}{p_{1} -1})(\frac{p_{2}}{p_{2}-1})\dots(\frac{p_{r}}{p_{r}-1}) φ(n)n=(p11p1)(p21p2)(pr1pr)
要使 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n最大化,我们需要让这个乘积最大化,注意到每一项 p p − 1 \frac{p}{p-1} p1p都大于 1 1 1,为了使这个乘积尽可能的大,我们应该选择:

  1. 尽可能多的不同的素因子。
  2. 尽可能小的素因子,因为对于较小的素数 p p p p p − 1 \frac{p}{p-1} p1p的值较大。

因此,我们应该选择 n n n为最小的若干连续素数的乘积,并且这个乘积不超过 1000000 1000000 1000000这种数被称为素连乘数(primorial)。
让我们来计算一下这些素连乘数

  1. 2 2 2
  2. 2 × 3 = 6 2\times3=6 2×3=6
  3. 2 × 3 × 5 = 30 2 \times 3 \times 5 = 30 2×3×5=30
  4. 2 × 3 × 5 × 7 = 210 2 \times 3 \times 5 \times 7 = 210 2×3×5×7=210
  5. 2 × 3 × 5 × 7 × 11 = 2310 2 \times 3 \times 5 \times 7 \times 11 = 2310 2×3×5×7×11=2310
  6. 2 × 3 × 5 × 7 × 11 × 13 = 30030 2 \times 3 \times 5 \times 7 \times 11 \times 13 =30030 2×3×5×7×11×13=30030
  7. 2 × 3 × 5 × 7 × 11 × 13 × 17 = 510510 2 \times 3 \times 5 \times 7 \times 11 \times 13 \times17=510510 2×3×5×7×11×13×17=510510
  8. 2 × 3 × 5 × 7 × 11 × 13 × 17 × 19 = 9699690 2 \times 3 \times 5 \times 7 \times 11 \times 13\times17\times19=9699690 2×3×5×7×11×13×17×19=9699690

由于 9699690 ≥ 1000000 9699690\geq1000000 96996901000000所以我们能取到的最大的数是 510510 510510 510510
这个数 n = 510510 n=510510 n=510510是由最小的连续素数 2 , 3 , 5 , 7 , 11 , 13 , 17 2,3,5,7,11,13,17 2,3,5,7,11,13,17的乘积得到的。任何其它小于等于 1000000 1000000 1000000的数,如果包含更大的素因数或者素因数的幂次(这不会改变 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n的值,因为 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n只依赖于不同的素因数),或者包含的因数更少,其 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n的值都会更小。
因此,对于 n ≤ 1000000 n\leq1000000 n1000000,使得 n φ ( n ) \frac{n}{\varphi(n)} φ(n)n取得最大值的n是 510510 510510 510510

code

其实根据上诉的思路不需要code了,但是还是给一下把
可以用筛法先筛选一些素数,当然也可以直接打表

// 510510
#include <bits/stdc++.h>using namespace std;using ll = long long;void solve() {ll li = 1000000;vector<int> pri = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31};ll n = 1, cur = 1;for (int p : pri) {if (p == 0) continue;if (cur > li / p) {break;}cur *= p;n = cur;}cout << n << "\n";}int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int tt = 1; // cin >> tt;while (tt--) {solve();}return 0;
}
http://www.xdnf.cn/news/5351.html

相关文章:

  • 炫酷粒子系统动画实战:Matplotlib实现银河漩涡效果
  • SierraNet M1288网络损伤功能显著助力GPU互联网络的测试验证,包含包喷洒,LLR等复杂特性的验证测试
  • GMS 与非 GMS:有何区别?
  • Java基础:代理
  • KNOWLEDGE-BASED SYSTEMS(KBS期刊)投稿经验分享
  • # 深度学习实操 附录B 深入解析 tensorflow 自动微分
  • 纯惯性导航、非线性最小二乘法纯uwb测距导航定位、惯性uwb松组合导航、惯性uwb紧组合导航,四种方法对比
  • 圆角边框 盒子阴影 文字阴影
  • Linux进程间通信(四)之补充【日志】
  • PCB设计实践(十三)PCB设计中差分线间距与线宽设置的深度解析
  • 蓝牙GAP协议概述
  • AI赋能研究工作:我的深度学习助手使用体验(DeepResearch)
  • 认识 Linux 内存构成:Linux 内存调优之内存分配机制和换页行为认知
  • ERP学习(二):用友软件产品之系统管理
  • 学习黑客5 分钟深入浅出理解SCP
  • 【从零实现JsonRpc框架#3】线程模型与性能优化
  • 《设计数据密集型应用》——阅读小记
  • JAVA——抽象类和接口的区别
  • 【Linux基础】系统监控和进程管理指令
  • 【Reality Capture 】Reality Capture1.5中文版安装教程(附安装包下载)
  • 英语六级---2024.12卷三 仔细阅读2
  • VRRP协议-IP地址冗余配置
  • Autoware播放提示音
  • ospf实验报告
  • Markdown—LaTeX 数学公式
  • 深入解析路由策略:从流量控制到策略实施
  • DAX 权威指南1:DAX计算、表函数与计算上下文
  • 《从零构建大模型》PDF下载(中文版、英文版)
  • python-django项目启动寻找静态页面html顺序
  • 洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术