【发布时间】:2021-12-26 10:03:19
【问题描述】:
这是我为学习 C 而写的一个未完成的程序(目前只检查 2 的倍数...)
最终,我希望这是埃拉托色尼筛(质数)的实现
我遇到的问题是输出是不确定的:有时输出包含 11,有时则不包含 - 少数数字会发生这种情况。我通过更改一些东西进行了实验,例如将布尔数组实际初始化为 false。
任何想法为什么会发生这种情况?
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(int argc, char *argv[]) {
int n = atoi(argv[1]);
int initialPrimeIterator = 2;
_Bool compositePrimeNumbers[n];
printf("Prime Numbers from 2 -> %d\n", n);
for (int i = initialPrimeIterator; i < n; i += initialPrimeIterator) {
compositePrimeNumbers[i-1] = true;
}
printf("Done...\n");
printf("Printing prime numbers from 2-> %d\n", n);
for (int i = 2; i < n; i++) {
if (!compositePrimeNumbers[i]){
printf("%d\n", i + 1);
}
}
return 0;
}
编辑:哈哈。刚刚意识到我有一个名为“compositePrime ...”的数组应该只是“compositeNumbers”
【问题讨论】:
-
_Bool compositePrimeNumbers[n];对于不是initialPrimeIterator(i += initialPrimeIterator) 倍数的数字未初始化。 -
请不要在代码中包含行号。如果您想指出特定行,请在问题本身中提及它并在该行上添加评论。
-
其他一些不相关的点:
<stdbool.h>标头定义了bool类型。在使用argv中的任何元素之前,您应该始终检查argc。 -
这应该是一次寻宝,还是您认为您可以提供输出令人惊讶的输入?
-
您可能想向rubber duck 或合适的替代者(室友、朋友等)解释您的第一个循环。它所做的只是将所有奇数索引标记为
true。
标签: c output primes non-deterministic