C++;素数程序 我正在研究一个C++程序,它确定并打印3到用户输入的整数x的质数。我假设我需要一个双嵌套循环,一个循环从3迭代到x,另一个循环检查数字是否为素数。我认为它需要做一些事情,比如从2到x-1?我真的不知道如何在语法方面做到这一点。谢谢你的帮助!:)
编辑: 这就是我所拥有的:C++;素数程序 我正在研究一个C++程序,它确定并打印3到用户输入的整数x的质数。我假设我需要一个双嵌套循环,一个循环从3迭代到x,另一个循环检查数字是否为素数。我认为它需要做一些事情,比如从2到x-1?我真的不知道如何在语法方面做到这一点。谢谢你的帮助!:),c++,primes,C++,Primes,编辑: 这就是我所拥有的: #include <iostream> #include <cmath> using std::cout; using std::endl; using std::cin; int main(){ int x; int i; int j; cout << "Please enter an integer 'x' greater than 3: " << endl; cin >
#include <iostream>
#include <cmath>
using std::cout;
using std::endl;
using std::cin;
int main(){
int x;
int i;
int j;
cout << "Please enter an integer 'x' greater than 3: " << endl;
cin >> x;
if (x <= 3){
cout << "Please enter new value 'x' greater than 3: " << endl;
cin >> x;
}
for(int i=3; i<=x; i++){
for(j=2; j<i; j++){
if(i%j == 0)
break;
else if(i == j+1);
cout << i << endl;
}
}
return 0;
}
#包括
#包括
使用std::cout;
使用std::endl;
使用std::cin;
int main(){
int x;
int i;
int j;
cout x;
if(xint main(char argv)
{
int tempNum=atoi(argv);
对于(int i=3;i如果你的X
足够小,你可以使用Eratosthenes筛来更有效地进行筛选。这非常适合于“最多X个素数”的情况,因为它保留了以前丢弃的素数的内存。它通过为每个候选数保留一组标志,所有标志最初都设置为true(当然,1除外)
然后取第一个真值(2),将其作为素数输出,然后将其所有倍数的标志设置为false
然后继续:
- 三,
- 5(因为4是2的倍数)
- 7(因为6是2和3的倍数)
- 11(因为8和10是2的倍数,9是3的倍数)
- 13(因为12是2的倍数)
- 17(因为14和16是2的倍数,15是3和5的倍数)
- 等等
伪代码类似于:
def showPrimesUpTo (num):
// create array of all true values
array isPrime[2..num] = true
// start with 2 and go until finished
currNum = 2
while currNum <= num:
// if prime, output it
if isPrime[currNum]:
output currNum
// also flag all multiples as nonprime
clearNum = currNum * 2
while clearNum <= num:
isprime[clearNum] = false
clearNum = clearNum + currNum
// advance to next candidate
currNum = currNum + 1
def showPrimesUpTo(num):
//创建所有真值的数组
数组isPrime[2..num]=true
//从2开始,直到完成
currNum=2
而currNum我发现这个非常快速有效
int main(){
for(int i=3; i<=X; i++)
if(IsPrime(i)){
cout<<i<<endl;
}
}
bool IsPrime(int num){
/* use commented part if want from 2
if(num<=1)
return false;
if(num==2)
return true;
*/
if(num%2==0)
return false;
int sRoot = sqrt(num*1.0);
for(int i=3; i<=sRoot; i+=2)
{
if(num%i==0)
return false;
}
return true;
}
intmain(){
对于It i=3;IIU应该检查ErasoSeNes的筛选器。我想,你的方法是正确的,但是你的问题不是很好的。如果它问一个非常具体的问题:C++中的循环语法是什么,或者我需要嵌套的循环来计算1到N的素数,那么它就更合适了。S显示了如何在不同的地方发布,容易访问,所以你可能想做一点研究,如果你仍然困惑的话再问一遍。到目前为止你尝试了什么?你在这里找到了关于同一主题的其他问题吗?编辑你的代码的最小编辑:考虑把这些问题张贴在上面。必须只进行小素数运算。@LokiAstari没有理解你?在什么引用中?如果上面的代码有任何缺陷?请建议。这是无效的:它是O(n^2),因此只对小的素数有用。在这项技术的基础上有一些很好的优化,使其更加有效。但是你真的想要埃拉托斯提尼筛
@LokiAstari非常感谢。在搜索埃拉托斯提尼筛
的过程中,我肯定会找到它。我知道,阿特金斯筛
很快除了Eratosthenes的筛子
外,您还需要检查每个j的j+1>sqrt(i)
测试
def isPrime (num):
// val is the value to check for factor
val = 2
// only need to check so far
while val * val <= num:
// check if an exact multiple
if int (num / val) * val == num:
return false
// no, carry on
val = val + 1
// if no factors found, it is a prime
return true
int main(){
for(int i=3; i<=X; i++)
if(IsPrime(i)){
cout<<i<<endl;
}
}
bool IsPrime(int num){
/* use commented part if want from 2
if(num<=1)
return false;
if(num==2)
return true;
*/
if(num%2==0)
return false;
int sRoot = sqrt(num*1.0);
for(int i=3; i<=sRoot; i+=2)
{
if(num%i==0)
return false;
}
return true;
}