质数达到数字
Prime Numbers Up To A Number
本文关键字:数字 更新时间:2023-10-16
我真的是C 的新手,并且使用书籍编程:使用C 的原理和练习。正在处理问题,以在1-用户给定的数字之间找到所有质数。现在我把那一部分倒下了。我现在知道SQRT(i(会使循环较短,但是,我不确定该检查该循环是否在我的if -else语句中查看它是否是素数。
#include<vector>
#include<iostream>
#include<cmath>
using namespace std;
int main(){
vector<double> prime_numbers;
double num;
cout << "Please enter a number so we can find the primes for it: " << flush;
cin >> num;
for (int i = 2; i <= num; i++) {
for (int j = 2; j <= i; j++) {
// cout << sqrt(i) << "t";
// Check to see if Value of i is incremented correctly
// Check to see if value of j is incremented properly before returnign to i
//cout << i <<"t" << j << endl;
if (j == i) {
prime_numbers.push_back(i);
}
if (i % j == 0) {
break;
}
}
}
for (double x : prime_numbers)
cout << x << " | ";
return 0;
}
找到从0到n的质数的非常有效的方法是使用eratosthenes的筛子,有很多方法可以做到这一点,以下是一个示例:
vector<bool> v(n, true);
v[0] = v[1] = false;
for (int i = 2; i*i < n; i+= 2){
if (v[i]) {
for (int k = i*i; k < n; k += i) {
v[k] = false;
}
if (i == 2)i = 1;
}
}
for(auto i = 0; i < n; ++i)
if(v[i])cout << i << ' ';
cout << endl;
区别在于您以前的原始条件 - i == j
- 不再是正确的。
当您检查了从2到i
的每个数字时,这是正确的,但是使用sqrt(i)
限制,您要早就退出循环。
我认为最简单的更改是引入变量并将push_back
移到循环外(这可以在任何一个环条件下使用(:
for (int i = 2; i <= num; i++) {
bool isPrime = true; // Assume 'i' is prime until proven wrong.
for (int j = 2; j <= sqrt(i); j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
prime_numbers.push_back(i);
}
}
也就是说,首先决定是否是这种情况,然后对该信息做某事。
在很多情况下,这是一个有用的设计。
例如,将原始性检查转移到功能中变得容易得多:
bool isPrime(int x) { /* something */ }
// ...
for (int i = 2; i <= num; i++) {
if (isPrime(i)) {
prime_numbers.push_back(i);
}
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在将数字随机生成为数组期间从内存输出随机数的数组