欧拉项目 # 51 c++
Project Euler # 51 c++
我正在尝试解决欧拉项目中的问题 51。
以下是问题陈述:欧拉项目问题 51
我尝试了下面给出的方法。
- 使用埃拉托色尼筛生成 2 到 10 次方 8 之间的所有质数
- 从筛子中收集所有 n 位数字(即首先我将获得所有 3 位数字,然后是 4 位数字.. 依此类推并计算)
- 检查数字是否有重复的数字(根据问题陈述,我们有 2 个相同数字的 *)。如果是,则转换为字符串
- 如果是,找到它重复的位置并将其保存为键(例如:12341 将导致 04 作为键,因为 1 是在 0 和第 4 个位置重复的数字)
-
现在基于键,插入桶中(桶是一个多映射,其中包含键作为重复位置(04),值作为质数)
-
对于存储桶中的每个键,删除重复的位置。如果我采用 04 存储桶键,那么该存储桶中的所有质数都将在位置 0 和 4 重复字符串。我删除字符串的第 0 和第 4 个位置,这将导致我的数字 (12341) 为 234 并将其插入到地图中,该地图会将出现次数存储为(234,8 是修剪后的数字和出现次数)。
现在,如果键 234 - 重复 8 次,找到被修剪并产生 234 的数字。这些就是答案。
我在 c++ 中运行了这个算法,对于 7 个素数 56003、56113、56333、56443、56663、56773 和 56993 的结果不到一秒。
但是,对于 8 位数字,我越过了 10 次幂 8 素数,但仍然没有产生任何答案。我相信答案超出了这个限制。
当我尝试生成 2 到 10 次方 9 之间的素数时,它会中止,因为我将所有数字存储在向量中。
我的问题是,
有没有办法让我们微调上述步骤并找到答案,或者我需要想一些其他方法来找到答案.
注意:仅举个例子,我以 12341 为例。
您的蛮力解决方案中至少存在一个问题。您假设正好有 2 位数字*
但问题从未提及这一点。可能有 1 或 3 个或更多数字,当用相同的数字替换时0-9
仍然生成素数。
以下原因,不可能有 8 个素数和 1 或 2 个*
:
如果你只使用 1
*
,假设用 1 替换它以获得素数(我们称之为素数 p)。现在如果p % 3 = 1
,你不能用0
、3
和6
替换*
,否则这个数字会变成复合的(可被3整除)。扔掉 3 个候选人使得不可能产生另一个素数。下一种情况,如果p % 3 = 2
,您不能将*
替换为2
,5
和8
原因相同。对于任何数量的数字,用一个*
制作 8 个素数是不可能的。如果你只使用 2
*
,假设用 1 替换两者以获得素数(我们称之为素数 p)。现在如果p % 3 = 2
,你不能用0
、3
和6
替换两个*
,否则这个数字会变成复合的(可被3整除)。扔掉 3 个候选人使得不可能产生另一个素数。下一种情况,如果p % 3 = 1
,出于同样的原因,您不能将*
替换为2
、5
和8
。对于任何数量的数字,都不可能使具有两个*
的 8 素数。
这就是您的代码没有提供所需输出的原因。您也许应该尝试使用 3 个*
字符。
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法在 CLion 中构建 C++ 项目
- 运行同一解决方案的另一个项目的项目
- CMake-按正确顺序将项目与C运行时对象文件链接
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 欧拉项目#8答案是大以获得有效答案
- 从链接列表c++中删除一个项目
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 既然存在危险,为什么项目要使用-I include开关
- cmake在我的项目中所需的所有静态库都不成功
- QT通过C++添加映射QML项目
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在linux上调试巨大的C++项目
- 在其他文件中创建类时在 c++ 项目中不起作用
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 如何维护资源管理器项目视图中当前可见的项目列表
- 错误-我无法在VS2019中打开新的Qt项目
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗