Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;素数程序 我正在研究一个C++程序,它确定并打印3到用户输入的整数x的质数。我假设我需要一个双嵌套循环,一个循环从3迭代到x,另一个循环检查数字是否为素数。我认为它需要做一些事情,比如从2到x-1?我真的不知道如何在语法方面做到这一点。谢谢你的帮助!:)_C++_Primes - Fatal编程技术网

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(x
int 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;
    }