我想创建一个函数,找到所有素数,直到numbernum
基于(筛分埃拉托色尼)算法
这是我的代码:
vector<int> prime(double num){
vector<int> check;
vector<int> prime;
if(num < 2) throw "Number must be bigger than or equal to 2!";
for(int i = 0; i<num;++i){
check.push_back(1);
}
for(double i = 2;i<sqrt(num);++i){
int k = 1;
if(check.at(i) == true){
for(double j = pow(i,2); j<num; j = j+k*i){
check[j] = 0;
prime.push_back(j);
++k;
}
}
}
return prime;
}
int main(){
int num;
vector<int> v;
cout << "Enter number n bigger than 1:";
cin >> num;
v = prime(num);
for(int i;i<v.size();++i){
cout << v[i];
}
}
我按部分检查了代码,除了这部分之外,一切都可以正常工作:
for(double i = 2;i<sqrt(num);++i){
int k = 1;
if(check.at(i) == true){
for(double j = pow(i,2); j<num; j = j+k*i){
check[j] = 0;
prime.push_back(j);
++k;
}
}
}
代码中没有错误,但是没有输出,我不明白为什么。
最里面的循环为(双 j = pow(i,2); j
您只想在每次迭代时将
j
增加i
i,但实际上您是将它增加了一些
的倍数。
你也不应该把所有的
j
都加到素数
上,它们都是通过构造来复合的。而是添加 i
。
因为< code>for
循环在运行前检查条件,所以不需要< code>throw for num
您可以始终使用int
,而不是在Double
中处理整数问题。
vector<int> prime(int num){
vector<bool> check(num, true); // num copies of true
vector<int> prime;
for(int i = 2; i < num; ++i){
if(check[i]){
prime.push_back(i);
for(int j = i*i; j < num; j += i){
check[j] = false;
}
}
}
return prime;
}
int main(){
cout << "Enter number n bigger than 1:";
int num;
cin >> num;
vector<int> v = prime(num);
for(int i : v){
cout << i;
}
}
我在我的一个班级里做的一个作业,我们必须实现一个厄拉多塞的筛子。我已经尝试了七次来得到一个有效的代码,并且尝试了整合我研究过的许多解决方案。我终于有一个可以输出数字的了。不幸的是,它同时打印合数和质数,但不打印2。 我的代码如下: 我怀疑我的循环有问题。我修复了前两个循环的和变量,以便它从2开始打印出来,问题似乎是在我将数组初始化为true后,它没有将合数标记为。 提前感谢你的帮助。
我正在尝试编写一个程序来实现对埃拉托西的筛选。我可以从2到任何给定的结束编号,但我们正在处理的赋值要求我们输入起始值。我完全被卡住了。我试过很多不同的代码,但它总是给我奇怪的答案。 我的起点是起始值,终点是结束值。我基本上想找到这个范围的素数。谢谢!!!
做一个简单的筛子很容易: 但是当N非常大并且我无法在内存中持有这种数组时,该怎么办?我已经查找了分段筛方法,它们似乎涉及查找素数,直到sqrt(N),但我不明白它是如何工作的。如果 N 非常大(比如 10^18)怎么办?
在一个类作业中,我被要求用Java编写Eratostenes筛选代码,我的代码效率非常低。运行时间不长,但我相当肯定,除了像我一样列出所有内容外,还有其他循环的空间。。 这是我的代码: 基本上,我所做的是将所有不是质数的元素设置为true… 所以我的主要2个问题是1。有没有办法实现一个循环,使代码更短2。如何打印此数组中所有为 true(质数)的元素
我在python中找到了一个示例代码,它给出了直到< code>n的所有素数,但我就是不明白,为什么它会这样做? 我读过维基百科上关于埃拉托色尼筛子的文章,但根本不知道它是如何工作的。 请解释一下循环是如何工作的。 EDIT-发现代码都错了,因为它表示25为素数,通过更深入的搜索发现这不是筛子,有人能展示一个利用python中筛子的生成器并解释它吗
我正在尝试实现筛选算法,它会询问连续数字列表的大小,并打印出该列表中的素数,但我收到了一个seg错误:11错误。 这是我的代码: