project euler做题记录

本文深入解析了Project Euler中两道高难度题目,problem441和problem530的求解过程,通过数学技巧和算法优化,实现了从复杂公式到高效代码的转变,最终达到O(n log n)和O(sqrt(n) log sqrt(n))的时间复杂度。

ProjectEuler_做题记录

简单记录一下。

problem 441 The inverse summation of coprime couples

神仙题。考虑答案为:
\[\begin{array}{c} S(n) & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i][gcd(p, q) = 1] \\ & = & \sum_{i = 1} ^ n \sum_{p = 1} ^ i \sum_{q = p + 1} ^ i \frac {1}{pq}[p + q \geq i] \sum_{d|gcd(p, q)} \mu(d) \\ & = & \sum_{i = 1} ^ n \sum_{d = 1} ^ n \mu(d) \sum_{p = 1} ^ {\lfloor i/d \rfloor} \sum_{q = 1} ^ {\lfloor i/d \rfloor} \frac {1}{pqd ^ 2}[pd + qd \geq i]\\ & = & \sum_{i = 1} ^ n \sum_{d = 1} ^ n \frac {\mu(d)}{d ^ 2} \sum_{p = 1} ^ {\lfloor i/d \rfloor} \sum_{q = 1} ^ {\lfloor i/d \rfloor} \frac {1}{pq}[p + q \geq \lfloor i/d \rfloor] \\ & - & \frac {1}{pq}[p + q = \lfloor i/d \rfloor][i \ mod \ d = 0] \\ \end{array}\]
我们考虑构造三个函数:
\[\begin{array}{c} F(n) & = & \sum_{i = 1} ^ n \frac {1}{i} \\ G(n) & = & \sum_{i = 1} ^ n \sum_{j = i + 1} ^ n \frac {1}{ij} [i + j = n] \\ T(n) & = & \sum_{i = 1} ^ n \sum_{j = i + 1} ^ n \frac {1}{ij} [i + j \geq n] \\ \end{array}\]
事实上,我们可以解出这三个函数的递归式,然后做到\(O(N)\)预处理。
然后最后的式子会变成:
\[S(n) = \sum_{d = 1} ^ n \frac {\mu(d)}{d ^ 2} \sum_{i = d} ^ n(T(\lfloor i/d \rfloor) - G(\lfloor i/d \rfloor)[i \ mod \ d \neq 0]) \]
然后就可以根据调和级数做到\(O(n \ lnn)\)

problem 530 GCD of Divisors

由于直接化简比较困难,考虑将整个答案一起化简:
\[\begin{array}{c} ans & = & \sum_{i = 1} ^ n \sum_{d \mid i} gcd(d, \frac {i}{d}) \\ & = & \sum_{g = 1} ^ n g \sum_{i = 1} ^ {n} \sum_{d \mid i} [gcd(d, \frac {i}{d}) = g](先枚举gcd的套路)\\ & = & \sum_{g = 1} ^ n g \sum_{i = 1} ^ {\lfloor n/g^2 \rfloor} \sum_{d \mid i} [gcd(d, \frac {i}{d}) = 1](设i = \frac {i}{g ^ 2}, d = \frac {d}{g})\\ & = & \sum_{g = 1} ^ n g \sum_{i = 1} ^ {\lfloor n/g^2 \rfloor} \sum_{d \mid i} \sum_{t \mid gcd(d, \frac {i}{d})} \mu(t) \\ & = & \sum_{g = 1} ^ n g \sum_{t = 1} ^ n \mu(t) \sum_{i = 1} ^ {\lfloor n/(gt) ^ 2 \rfloor} \sum_{d \mid i} 1 (设i = \frac {i}{t ^ 2}, d = \frac {d}{t},也是套路)\\ & = & \sum_{g = 1} ^ n g \sum_{t = 1} ^ n \mu(t) \sum_{i = 1} ^ {\lfloor n/(gt) ^ 2 \rfloor} \sigma_0(i)(\sigma_0(i)表示i的因子个数)\\ &!&(下一步是个新套路,构造\phi的卷积形式\phi = \mu * 1) \\ & = & \sum_{k = 1} ^ {\sqrt n} \sum_{g \mid k} g\mu(\frac {k}{g}) \sum_{i = 1} ^ {\lfloor n/k ^ 2 \rfloor} \sigma_0(i)(k = gt,注意k的取值只需要到\sqrt n)\\ & = & \sum_{k = 1} ^ {\sqrt n} \phi(k) \sum_{i = 1} ^ {\lfloor n/k ^ 2 \rfloor} \sigma_0(i)\\ &!& (最后套用\sum_{i = 1} ^ {m} \sigma_0(i) = \sum_{i = 1} ^ m \lfloor \frac {m}{i} \rfloor)\\ & = & \sum_{k = 1} ^ {\sqrt n} \phi(k) \sum_{i = 1} ^ {\lfloor n/k ^ 2 \rfloor} \lfloor \frac {\lfloor n/k ^ 2 \rfloor}{i} \rfloor \\ \end{array}\]
对后面部分使用除法分块,复杂度就是\(\sum_{i = 1} ^ {\sqrt n} O(\sqrt \frac {n}{i ^ 2}) = \sum_{i = 1} ^ {\sqrt n} O(\frac {\sqrt n}{i}) = O(\sqrt n \ ln \sqrt n)\)

转载于:https://www.cnblogs.com/whc200305/p/9505401.html

广州商学院 现代信息产业学院2025—2026学年第1学期 《Linux操作系统与应用》考查内容 一、项目内容 本课程设计考查内容覆盖本学期讲授的全部章节,采用实机操作方式答题,需在科任教师要求截止时间前完成,将各题设计操作结果按步骤编号、截图、并以文字说明操作方法附至题目下方,按照实验报告形式完成,并将完成后的文档提交到学习通。 文档命名方式:学号+姓名.docx 如: 20221209010_张三.docx 考核任务背景说明: 你作为某企业运维工程师,需为公司新购服务器(基于OpenEuler系统)搭建标准化运维环境,涵盖系统安装、用户权限、磁盘管理、网络安全、服务部署全流程。所有操作需在虚拟机中独立完成,确保环境可复现。 1. 任务一:OpenEuler虚拟机环境搭建(10分) 使用VMware Workstation新建虚拟机,安装OpenEuler 24.03 LTS x86_64系统,要求: (1) 总容量20GB,接口类型为SCSI (2) 分区方案:需保留至少5GB未分配空间 (3) 主机名:studentXX-openeuler(XX为学号后两位) (4) 启用root账户,创建初始用户user 2. 任务二:用户与组权限管理(20分) 创建一个基于“班级协作项目”工作环境,便于未来多用户进行操作 (1) 创建组class(GID=学号后三位,如学号20240001则GID=001) (2) 创建用户xxx_user1、xxx_user2(xxx为姓名缩写) (3) 将用户xxx_user1添加至class组 (4) 创建共享目/data/class_project,属主root,属组class, (5) 在/data/class_project下创建子目:docs和reports a) docs(仅class组成员可访问) b) reports(仅xxx_user1可写入) c) 使用setfacl为xxx_user2授予reports目写入权限 (6) 在docs目创建project_plan.txt,内容为:(xxxxxxx为学生完整学号) “Project Plan for Class Project Student ID: xxxxxxx” (7) 追加个人姓名缩写到project_plan.txt,并展示文件内容 (8) 修改project_plan.txt权限为属主可读写,组内只读 (9) 至xxx_user2,验证其在docs和reports目的操作权限 (10) 生成/data目的完整文件树,并检查ACL配置 3. 任务三:磁盘管理与配额(20分) 模拟服务器扩容场景,添加并配置新磁盘 (1) 在VMware中为虚拟机添加1块虚拟磁盘 (容量=学号后一位+1)× 3GB,如学号后两位“05”则18GB (2) 新硬盘设置分区: 分区类型 分区大小 文件系统类型 挂载目 主分区1 总容量50% ext4 /mnt/devteam1 逻辑分区 逻辑分区1 总容量30% ext4 /mnt/devteam2 逻辑分区2 总容量20% xfs /mnt/devteam3 注:主分区1与逻辑分1为临时挂载,逻辑分区2为自动挂载 (3) 启用配额,设置xxx_user1对/mnt/devteam3的限额为: 软限制:3,硬限制:5(用dd验证) (4) 给初始硬盘添加扩展分区,要求完成创建PV,创建VG,创建LV,格式化并挂载LV,以及动态扩容的操作。 分区类型 分区大小 分区命名 文件系统 挂载目 特殊说明 物理卷(PV) 5G pv_data LVM基础 卷组(VG) 5G vg_storage 可扩展 逻辑卷(LV) 3G lv_www ext4 /var/www 初始分配 扩展后LV 5G lv_www ext4 /var/www 动态扩容 4. 任务四:Shell脚本开发(20分) 编写2个独立脚本,综合应用Shell编程核心语法,实现自动化运维场景: 脚本1:批量用户生命周期管理(script1.sh) (1) 参数传递:支持-a 用户名(添加用户并加入class组)、-d 用户名(删除用户及家目) (2) 测试条件选择:若用户不存在则提示创建,存在则提示是否强制删除 (3) 全局变量:定义USER_PREFIX="stu",生成标准化用户名(如stu_001) (4) 键盘读取:允许手动输入用户UID范围(如1000-2000) 脚本2:日志分析统计(script2.sh) (1) 循环机制:遍历/var/log下所有.log文件 (2) 随机数应用:模拟日志生成器并输出到/tmp/test.log (3) 算术运算:统计日志文件大小总和输出到屏幕 (4) 键盘读取:允许用户指定日志文件名过滤条件 以上脚本开头注释必须包含学号水印: # Author: 学号_姓名缩写 提交测试记包括: ./script1.sh -a stu_$(id -u)测试用户创建(测试xxx_user2) ./script2.sh生成的日志文件/tmp/test.log内容截图 5. 任务五:网络与安全配置(含Samba,Nginx服务)(20分) 验证服务器网络基础功能,排查潜在问题并确保服务可用性 (1) 运行对应命令,截图显示网卡名称、IP地址、MAC地址信息,并说明哪一个字段是对应信息 (2) 使用命令测试连接主机(当前电脑)与外网(百度),并确认防火墙状态 (3) 对防火墙设置开放SSH(22)、HTTP(80)、Samba(445)端口 (4) 查看已安装软件(前5行即可)和当前的软件源 (5) 安装Samba,并用Windows和smbclient测试 a) 创建共享目/date/samba/xxx_share(xxx为姓名缩写) b) 创建Samba共享账号xxx_smb,并配置/etc/samba/smb.conf: 共享xxx_share,允许xxx_smb读写,其他用户只读 (6) 安装nginx,并本地验证,需显示Nginx欢迎页 (7) 利用MobaXterm工具远程连接管理linux系统,使用命令修改主机名,并重新连接查看到成功 6. 任务六:进程与服务系统管理(10分) 作为企业运维工程师,你需优化公司Web服务器的性能与稳定性。当前服务器运行Nginx服务,但因突发流量导致CPU过载。请通过进程管理、服务控制和资源监控手段解决以下问题: (1) 使用stress-ng工具模拟CPU负载,设置4个CPU进程,持续5分钟 (2) 另开终端显示进行实时进程监控,并把stress-ng进程的PID、CPU占用率、NI值,并截图 (3) 调整其中一个stress-ng进程的NI值调整为-10,并查看当前用户的资源限制 (4) 杀死所有stress-ng进程,并验证当前的资源恢复 (5) 用bash模拟一个多线程任务(启动4个后台sleep线程) (6) 记进程组的PGID和父进程PID,输出包含进程ID、线程ID、CPU核心编号、CPU占用率,最后再状图显示线程关系,以上记用截图保存结果 (7) 对已部署Nginx,执行查看状态,设置开机启动,重启,查看依赖关系 (8) 用journalctl查看Nginx最近10条日志,并截图保存 [root@student43-openeuler ~]# sudo xfs_quota -x -c 'report -h' /mnt/devteam3 User quota on /mnt/devteam3 (/dev/sdb6) Blocks User ID Used Soft Hard Warn/Grace ---------- --------------------------------- root 0 0 0 00 [------] zrs_user1 0 4K 8K 00 [------] [root@student43-openeuler ~]# sudo xfs_quota -x -c 'quota on -u' /mnt/devteam3 xfs_quota: cannot find user on [root@student43-openeuler ~]# sudo vim /etc/fstab [root@student43-openeuler ~]# sudo systemctl daemon-reload [root@student43-openeuler ~]# sudo umount /mnt/devteam3 [root@student43-openeuler ~]# sudo mount /mnt/devteam3 [root@student43-openeuler ~]# mount | grep /mnt/devteam3 /dev/sdb6 on /mnt/devteam3 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,usrquota) [root@student43-openeuler ~]# sudo touch /mnt/devteam3/lost+found/quota.user touch: 无法 touch '/mnt/devteam3/lost+found/quota.user': No such file or directory [root@student43-openeuler ~]# ls -la /mnt/devteam3/ 总计 4 drwxrwxr-x. 2 zrs_user1 class 6 12月20日 03:11 . drwxr-xr-x. 5 root root 4096 12月20日 02:01 .. [root@student43-openeuler ~]# sudo mkdir -p /mnt/devteam3/lost+found [root@student43-openeuler ~]# sudo chmod 700 /mnt/devteam3/lost+found [root@student43-openeuler ~]# sudo chown root:root /mnt/devteam3/lost+found [root@student43-openeuler ~]# sudo touch /mnt/devteam3/lost+found/quota.user [root@student43-openeuler ~]# sudo chmod 600 /mnt/devteam3/lost+found/quota.user [root@student43-openeuler ~]# ls -l /mnt/devteam3/lost+found/ 总计 0 -rw-------. 1 root root 0 12月20日 03:23 quota.user [root@student43-openeuler ~]# su - zrs_user1 上一次登: 2025年12月20日 星期六 03:12:08 CST 于 pts/0 Welcome to 6.6.0-28.0.0.34.oe2403.x86_64 System information as of time: 2025年 12月 20日 星期六 03:23:44 CST System load: 0.00 Memory used: 5.2% Swap used: 0% Usage On: 31% IP address: 192.168.136.133 IP address: 192.168.122.1 Users online: 1 To run a command as administrator(user "root"),use "sudo <command>". [zrs_user1@student43-openeuler ~]$ dd if=/dev/zero of=/mnt/devteam3/test_3k bs=1K count=3 dd: 打开 '/mnt/devteam3/test_3k' 失败: Disk quota exceeded [zrs_user1@student43-openeuler ~]$ ^C [zrs_user1@student43-openeuler ~]$ exit 注销 [root@student43-openeuler ~]# sudo xfs_quota -x -c 'quota on -u' /mnt/devteam3 xfs_quota: cannot find user on [root@student43-openeuler ~]# sudo xfs_quota -x -c 'limit -u bsoft=3k bhard=5k zrs_user1' /mnt/devteam3 [root@student43-openeuler ~]# sudo xfs_quota -x -c 'state' /mnt/devteam3 User quota state on /mnt/devteam3 (/dev/sdb6) Accounting: ON Enforcement: ON Inode: #131 (2 blocks, 2 extents) Blocks grace time: [7 days] Blocks max warnings: 0 Inodes grace time: [7 days] Inodes max warnings: 0 Realtime Blocks grace time: [7 days] Group quota state on /mnt/devteam3 (/dev/sdb6) Accounting: OFF Enforcement: OFF Inode: N/A Blocks grace time: [--------] Blocks max warnings: 0 Inodes grace time: [--------] Inodes max warnings: 0 Realtime Blocks grace time: [--------] Project quota state on /mnt/devteam3 (/dev/sdb6) Accounting: OFF Enforcement: OFF Inode: N/A Blocks grace time: [--------] Blocks max warnings: 0 Inodes grace time: [--------] Inodes max warnings: 0 Realtime Blocks grace time: [--------] [root@student43-openeuler ~]# sudo dd if=/dev/zero of=/mnt/devteam3/.warmup bs=1K count=1 输入了 1+0 块记 输出了 1+0 块记 1024 字节 (1.0 kB, 1.0 KiB) 已复制,0.000628372 s,1.6 MB/s [root@student43-openeuler ~]# sudo chown zrs_user1:class /mnt/devteam3/.warmup [root@student43-openeuler ~]# sudo rm /mnt/devteam3/.warmup [root@student43-openeuler ~]# sudo xfs_quota -x -c 'report -h' /mnt/devteam3 User quota on /mnt/devteam3 (/dev/sdb6) Blocks User ID Used Soft Hard Warn/Grace ---------- --------------------------------- root 0 0 0 00 [------] zrs_user1 0 4K 8K 00 [------] [root@student43-openeuler ~]# su - zrs_user1 上一次登: 2025年12月20日 星期六 03:23:44 CST 于 pts/0 Welcome to 6.6.0-28.0.0.34.oe2403.x86_64 System information as of time: 2025年 12月 20日 星期六 03:27:50 CST System load: 0.00 Memory used: 5.3% Swap used: 0% Usage On: 31% IP address: 192.168.136.133 IP address: 192.168.122.1 Users online: 1 To run a command as administrator(user "root"),use "sudo <command>". [zrs_user1@student43-openeuler ~]$ dd if=/dev/zero of=/mnt/devteam3/test_3k bs=1K count=3 dd: 打开 '/mnt/devteam3/test_3k' 失败: Disk quota exceeded [zrs_user1@student43-openeuler ~]$ exit 注销 [root@student43-openeuler ~]# sudo xfs_quota -x /mnt/devteam3 xfs_quota> quota on -u xfs_quota: cannot find user on xfs_quota> exit command "exit" not found xfs_quota> quit [root@student43-openeuler ~]# sudo xfs_quota -x /mnt/devteam3 xfs_quota> enable -u Quota enforcement already enabled. xfs_quota> state User quota state on /mnt/devteam3 (/dev/sdb6) Accounting: ON Enforcement: ON Inode: #131 (2 blocks, 2 extents) Blocks grace time: [7 days] Blocks max warnings: 0 Inodes grace time: [7 days] Inodes max warnings: 0 Realtime Blocks grace time: [7 days] Group quota state on /mnt/devteam3 (/dev/sdb6) Accounting: OFF Enforcement: OFF Inode: N/A Blocks grace time: [--------] Blocks max warnings: 0 Inodes grace time: [--------] Inodes max warnings: 0 Realtime Blocks grace time: [--------] Project quota state on /mnt/devteam3 (/dev/sdb6) Accounting: OFF Enforcement: OFF Inode: N/A Blocks grace time: [--------] Blocks max warnings: 0 Inodes grace time: [--------] Inodes max warnings: 0 Realtime Blocks grace time: [--------] xfs_quota> limit -u bsoft=3k bhard=5k zrs_user1 xfs_quota> report -h User quota on /mnt/devteam3 (/dev/sdb6) Blocks User ID Used Soft Hard Warn/Grace ---------- --------------------------------- root 0 0 0 00 [------] zrs_user1 0 4K 8K 00 [------] xfs_quota> quit [root@student43-openeuler ~]# sudo dd if=/dev/zero of=/mnt/devteam3/.warmup bs=1K count=1 输入了 1+0 块记 输出了 1+0 块记 1024 字节 (1.0 kB, 1.0 KiB) 已复制,0.00021818 s,4.7 MB/s [root@student43-openeuler ~]# sudo chown zrs_user1:class /mnt/devteam3/.warmup [root@student43-openeuler ~]# sudo rm /mnt/devteam3/.warmup [root@student43-openeuler ~]# su - zrs_user1 上一次登: 2025年12月20日 星期六 03:27:49 CST 于 pts/0 Welcome to 6.6.0-28.0.0.34.oe2403.x86_64 System information as of time: 2025年 12月 20日 星期六 03:35:36 CST System load: 0.08 Memory used: 5.3% Swap used: 0% Usage On: 31% IP address: 192.168.136.133 IP address: 192.168.122.1 Users online: 1 To run a command as administrator(user "root"),use "sudo <command>". [zrs_user1@student43-openeuler ~]$ dd if=/dev/zero of=/mnt/devteam3/test_3k bs=1K count=3 dd: 打开 '/mnt/devteam3/test_3k' 失败: Disk quota exceeded [zrs_user1@student43-openeuler ~]$ exit 注销 [root@student43-openeuler ~]# sudo xfs_quota -x -c 'sync -u' /mnt/devteam3 command "sync" not found [root@student43-openeuler ~]# sudo xfs_quota -x -c 'state -u zrs_user1' /mnt/devteam3 state [-gpu] [-a] [-v] [-f file] -- get overall quota state information [root@student43-openeuler ~]# sudo xfs_quota -x -c 'timer -b' /mnt/devteam3 timer [-bir] [-g|-p|-u] value [-d|id|name] -- set quota enforcement timeouts [root@student43-openeuler ~]# sudo xfs_quota -x /mnt/devteam3 << EOF > enable -u > limit -u bsoft=3k bhard=5k zrs_user1 > sync -u > quit > EOF Quota enforcement already enabled. command "sync" not found 我在任务三(3)尝试多次依旧失败,现在我想跳过这道题,请你告诉我应该输入什么命令并截图,如何向老师阐述我过的什么样尝试仍旧失败
12-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值