IT评测·应用市场-qidao123.com技术社区

标题: 蓝桥杯:标记名称 [打印本页]

作者: 傲渊山岳    时间: 2025-4-6 16:16
标题: 蓝桥杯:标记名称
1. 标题要求

标题要求是:

2. 你的代码逻辑

你的代码逻辑是:
  1. N = int(input())
  2. k = 0
  3. i = 2
  4. while i < N:
  5.   if N % i != 0:
  6.     k += 1
  7.     i += 1
  8. print(k)
复制代码
这段代码的主要逻辑是:

这个逻辑显然与标题要求不符。你的代码实际上是在计算小于 N 的非因数的个数,而不是在模仿横幅标记的过程。
3. 正确的思路

要办理这个问题,我们必要模仿横幅标记的过程。具体步调如下:
4. 正确的代码实现

以下是根据标题要求实现的代码:
  1. N = int(input())  # 输入等分数 N
  2. marked_positions = set()  # 用来存储已经标记过的位置
  3. new_marks = 0  # 新增的标记数量
  4. for i in range(2, N + 1):  # 从 2 开始到 N 等分
  5.     for k in range(1, i):  # 检查每个位置 k/i
  6.         position = k / i
  7.         if position not in marked_positions:  # 如果这个位置没有标记过
  8.             marked_positions.add(position)  # 标记这个位置
  9.             new_marks += 1  # 增加标记数量
  10. print(new_marks)  # 输出新增的标记数量
复制代码
5. 为什么你的代码不对


通过上述分析,你应该可以清晰地看到你的代码与标题要求之间的差距。希望这个解释对你有资助!
差距在哪呀?为什么我写不出?
1. 理解问题的深度


2. 数学基础和逻辑思维


3. 编程技巧和实现能力


 4.缺乏练习和经验


5. 心理因素



一些具体的发起



它给的也不对。
1.每一次都算,例如1/2,2/4,浪费空间
2.k / i要是除不尽,数太大,内存会崩,
所以,我们必要找到一种更高效的方法来计算新增的标记数量,而不是直接存储每个位置。用欧拉函数,
关键点:欧拉函数

欧拉函数 表示小于 且与 互质的正整数的个数。对于一个分数 ,如果 和 互质,那么这个位置是新增的标记位置。因此,新增的标记数量 实际上就是 。
优化后的代码

我们可以通过计算欧拉函数来办理这个问题,而不必要存储大量的浮点数。
  1. import math
  2. def euler_phi(n):
  3.     """计算欧拉函数值"""
  4.     result = n
  5.     p = 2
  6.     while p * p <= n:
  7.         if n % p == 0:
  8.             while n % p == 0:
  9.                 n //= p
  10.             result -= result // p
  11.         p += 1
  12.     if n > 1:
  13.         result -= result // n
  14.     return result
  15. N = int(input())
  16. print(euler_phi(N))
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4