项目Euler 51 C++

项目Euler 51 C++,c++,C++,我正在努力解决欧拉计划中的51题 以下是问题陈述: 我尝试了下面给出的方法 使用Eratosthenes筛生成2到10次方8之间的所有素数 从筛子中收集所有n位数字,即。。首先我会得到所有的3位数,然后是4位数。。继续计算 根据问题陈述,检查数字是否有重复的数字,我们有2*s相同的数字。如果是,则转换为字符串 如果是,找到重复的位置并将其保存为键,例如:12341将结果04作为键,因为1是在0和第4位置重复的数字 现在,根据键,在bucket中插入一个multimap,其中包含重复位置04的键和

我正在努力解决欧拉计划中的51题

以下是问题陈述:

我尝试了下面给出的方法

使用Eratosthenes筛生成2到10次方8之间的所有素数 从筛子中收集所有n位数字,即。。首先我会得到所有的3位数,然后是4位数。。继续计算 根据问题陈述,检查数字是否有重复的数字,我们有2*s相同的数字。如果是,则转换为字符串 如果是,找到重复的位置并将其保存为键,例如:12341将结果04作为键,因为1是在0和第4位置重复的数字 现在,根据键,在bucket中插入一个multimap,其中包含重复位置04的键和素数的值

对于铲斗中的每个钥匙,删除重复位置。如果我使用04 bucket key,那么该bucket中的所有素数将在位置0和4处重复字符串。我正在删除字符串的第0和第4个位置,这将导致我的编号12341为234,并将其插入到地图中,地图将存储事件为234,8是修剪后的编号和事件数

现在,如果键234重复了8次,则找到经过修剪并得到234的数字。这些就是答案。

我在C++中运行了这个算法,对于7个素数,56003, 56113, 56333、56443, 56663, 56773和56993的结果小于一秒。p> 但是,对于8位数字,我跨越了10次幂8素数,仍然没有得到任何答案。我相信答案超出了这个限度

当我尝试生成2到10次方9之间的素数时,它将中止,因为我将所有数字存储在向量中

我的问题是,

我们有没有办法微调上述步骤并找到答案, 或者我需要想别的办法来找到答案


注:我举了12341作为例子

暴力解决方案中至少有一个问题。你们假设正好有两个数字是*但问题从来并没有提到这一点。可能有1个或3个或更多的数字,当替换为相同的数字0-9时,仍然会生成素数

由于以下原因,不可能用1或2*表示8素数:

如果你只用1*,用1代替它得到一个素数,我们称之为素数p。现在,如果p%3=1,则不能将*替换为0、3和6,否则数字将由3显示。扔掉3个候选者,就不可能产生另一个质数。下一种情况是,如果p%3=2,出于同样的原因,您不能将*替换为2、5和8。对于任意数量的数字,用1*生成8素数是不可能的

如果你只使用2*,假设用1替换两者,得到一个素数,我们称之为素数p。现在,如果p%3=2,则不能同时将*替换为0、3和6,否则数字将由3显示。扔掉3个候选者,就不可能产生另一个质数。下一种情况是,如果p%3=1,出于同样的原因,您不能将*替换为2、5和8。对于任意数量的数字,用两个*生成8素数是不可能的


这就是代码没有给出所需输出的原因。您或许应该尝试使用3*个字符。

这是如何获得选票的!?Mohit Jain,我想知道这种方法是否至少适合找到解决方案。如果答案是“是”,我将发布代码。代码太大:-问题陈述不需要重复一个数字-第一个示例甚至是一个替换一个数字的示例-也不需要只重复一次。例如,答案可能是*1**1*1。。我以为只有2*s。。谢谢你的澄清。我将重新构造算法。但是,如果答案超过10次方9,那么埃拉托斯坦筛的替代品是什么?现在我相信答案将低于10次方8:P。谢谢你的澄清。好吧,在这种情况下,你需要一个更聪明的算法,而不仅仅是蛮力算法。如果需要提示,则数字小于8位。