为什么我的代码说109不是素数
Why does my code say 109 is not a prime?
我正在尝试生成素数,我几乎让它工作了,但由于某种原因,它表明当109是素数时,109不是素数。
所以当我输出factorCount时,它显示"113::29",当113是第30个素数时,它是107而不是109。
#include <iostream>
using namespace std;
void mark(bool arr[], int a, int n){
int i = 2;
int num = 0;
while((num = i*a) <= n){
arr[num-1] = 1;
i++;
}
}
void sieve(int n){
int primeCount = 0;
if(n >= 2){
bool arr[n];
for(int i=1; i<n; i++){
if(arr[i] == 0){
primeCount++;
cout << i+1 << " :: " << primeCount << endl;
mark(arr, i+1, n);
}
}
}
}
int main(){
int n = 120;
sieve(n);
return 0;
}
您的代码使用未初始化的变量:
bool arr[n];
for(int i=1; i<n; i++){
if(arr[i] == 0){ // <--- here
如果未将arr[i]
的值设置为任何值,则检查该值。
此外,bool arr[n];
在C++中是非法的,尽管有些编译器将其作为扩展添加。在标准C++中,数组边界必须在编译时已知。要修复它,请将bool arr[n];
更改为:
std::vector<unsigned char> arr(n); // note: parentheses, not square brackets
此版本将对成员进行零初始化。不幸的是,vector<bool>
不能在这里工作,因为它有一个奇怪的专业化。您需要将&arr[0]
传递给mark
,而不仅仅是arr
。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么我的代码在输出中增加了93天
- 0-1背包代码中的错误.我的代码中有什么错误
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 在我的代码中,获得最大的Pair Wise产品C++和输出并不总是正确的
- 为什么我的C++代码中出现'Segmentation Fault: 11'行?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 如何重写全局方法名称以在调用原始方法之前将我的代码推到前面
- 我的代码运行良好,但在游戏循环中中断
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?
- 我认为我的代码很好,但它在 cin a 之后停止并且没有进一步?
- 我的代码中的意外价值以及我如何修复它
- 为什么 rand 不在我的代码中生成随机数?
- 编写了一个C++代码来检查表达式是否具有平衡括号并且我的代码未运行.我已经卡了一天了
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 无法找出我的代码中的内存泄漏
- 我不明白为什么我的代码不起作用并且需要更长的时间来运行
- 我正在尝试创建一个菜单,但我的代码一直在循环