了解uva 10006的解决方案代码

时间:2019-01-20 08:27:08

标签: python c++ python-3.x primes

我找到了uva 10006的solution的代码段: 但是,我在理解它时遇到了一些麻烦(我使用的是python和java,以前从未使用过c ++)。我也听不懂其中的逻辑。

首先,这与python等效吗?

bool isComp[MaxNumChecked];
bool isCar[MaxNumChecked];

第二,对于第23行的条件,用于检查数字是否为合成的isComp []的实现在哪里?是内置的吗?

if (!isComp[i]) 

第三,在第26行的循环中,要对其进行迭代的值是什么?

for (int j = 3 * i; j < MaxNumChecked; j += 2*i)

最后,我可以说我可以全局理解除上述问题外代码的作用,但是我一开始无法理解这些注释。你能解释一下我吗?

// First, filter for primes
// Then, for each num, for every n greater than it, test if the carmichael doesn't hold
// This is sqrt(65005)

1 个答案:

答案 0 :(得分:0)

第一个问题:Python没有内置数组。您可以改用列表。这些是局部数组。您可以在此处了解更多信息:

Static array vs. dynamic array in C++

第二个问题:这个if语句正在检查布尔值,因此有实现方法。直接将其翻译成机器代码。

第三个问题:它从3 * i开始迭代; j在每次迭代结束时增加2 * i(j = j + 2 * i);如果j> = MaxNumChecked,则循环停止。

评论说它正在过滤(跳跃)素数。这就是为什么他为了避免偶数而以2而不是1为增量。它也从3开始跳到1和2。它不会跳所有素数,但至少是最明显的。

您正在研究的代码未优化。可以避免一些重复的迭代并避免一些分配。