Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.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++_Function_Primes - Fatal编程技术网

C++ 显示素数的程序

C++ 显示素数的程序,c++,function,primes,C++,Function,Primes,我必须做一个函数,使用两个先前引用的输入来显示两个数字之间的所有素数,输入称为imin,imax,我们得到的代码部分是 cout << "Primes:"; for (int j = imin; j <= imax; j++) { if (is_prime(j)) { cout << " " << j; } } cout#包括 使用名称空间std; 布尔是素数(int j) { 布尔素数(真); 对于(int

我必须做一个函数,使用两个先前引用的输入来显示两个数字之间的所有素数,输入称为imin,imax,我们得到的代码部分是

cout << "Primes:";
for (int j = imin; j <= imax; j++) {
    if (is_prime(j))
    {
         cout << "  " << j;
    }
}
cout
#包括
使用名称空间std;
布尔是素数(int j)
{
布尔素数(真);
对于(int k=2;kcout函数的最后一行:
返回真值


无论数字是否为素数,都将始终返回true,因此显示所有数字。如果将任何数字“n”作为参数传递给为素数(n),它将始终返回true。

我可以找到三个错误:

  • 数字应该被认为是素数,除非你们能证明其他(找到一个除数)-行:
    bool素数(false);
  • 若你们找到一个除数,那个么这个数就不是素数——当
    j%k==0
    时,但在你们的代码中你们有相反的东西
  • 当你证明一个数不是素数时,就不需要继续计算了

    • 亲自编写函数比用蹩脚的英语解释函数错误的原因更简单。:)

      bool是素数(无符号整数值)
      {
      布尔素数=(值==2)| |(值%2&&value!=1);
      对于(无符号整数j=3;素数和&j
      for语句可以写成

      for ( unsigned int j = 3; prime && j * j <= value; j += 2 )
      

      for(unsigned int j=3;prime&&j*j您的代码中有一些错误

      首先,当j%k等于零时,这个数字不是素数。 第二,你必须处理inf号到2号。它们需要特殊处理

      我对你的代码做了一些修改。请看:

      bool is_prime(int j)
      {
        for (int k = 2; k < j; k++)
          if (j % k == 0)
            return (false);
        if (j < 2)
          return (false);
        return (true);
      }
      
      循环停止原因k等于j。 函数返回true,数字5为素数

      现在假设j是数字10,让我们看看有什么变化:

        if (j % k == 0) With k moving from 2 to (j - 1) so 9
      
        if (10 % 2 == 0) -> true, function return false
      
      10号不是素数


      如果您有任何问题,欢迎提问。:

      您的代码中有错误,素数只有两个因子,即1和数字本身,因此代码应如下所示:

      bool is_prime( int j)
      {
          bool primes(false);
          for (int k = 2; k < j; k++)
          {        
              if (j%k == 0) // if (k mod j == 0)
              {
                   primes = false;
                   break; //if number is divisible in between then retrun false and break the loop
              }
              else if (j%k !=0)
              {
                  primes = true;
              }
          }
          return primes;
      }
      
      bool是素数(intj)
      {
      布尔素数(假);
      对于(int k=2;k

      请尝试该代码,如果出现错误,请告诉我。首先,您应该删除任何偶数素数候选项:

      if (imin < 2) // no primes < 2 :
          return;
      
      cout << "Primes:";
      if (imin == 2)
          cout << "  " << i;
      
      imin = imin + ((imin & 0x1) == 0); // advance to next odd number.
      

      如果这是家庭作业,那么它真的应该被标记为家庭作业。这样我们就可以帮助你指出正确的方向,而不是为你做家庭作业。@MatBailie我正准备用同样的话发表评论!就像我说的,我是新来的,我甚至不知道这是一个选项。感谢tipI没有足够的声誉让标记回家我刚试过。家庭作业标签不推荐使用。成千上万的用户花费数小时将其从以前使用过的所有帖子中删除…当我输入返回素数时,输出是空的。当你发现它不是素数时,你可能还想打断它,它可以重新分配变量并给出一个假/正的ASIBA Vlad,非常感谢
         if (j % k == 0) With k moving from 2 to (j - 1) so 4
      
         if (5 % 2 == 0) -> false, loop continue
         if (5 % 3 == 0) -> false, loop continue
         if (5 % 4 == 0) -> false, loop continue
      
        if (j % k == 0) With k moving from 2 to (j - 1) so 9
      
        if (10 % 2 == 0) -> true, function return false
      
      bool is_prime( int j)
      {
          bool primes(false);
          for (int k = 2; k < j; k++)
          {        
              if (j%k == 0) // if (k mod j == 0)
              {
                   primes = false;
                   break; //if number is divisible in between then retrun false and break the loop
              }
              else if (j%k !=0)
              {
                  primes = true;
              }
          }
          return primes;
      }
      
      if (imin < 2) // no primes < 2 :
          return;
      
      cout << "Primes:";
      if (imin == 2)
          cout << "  " << i;
      
      imin = imin + ((imin & 0x1) == 0); // advance to next odd number.
      
      for (int j = imin; j <= imax; j += 2) // odd candidates (j > 2) only:
      {
          if (is_prime(j))
               cout << "  " << j;
      }
      
      bool is_prime (int j)
      {
          // assert (j > 2 && (j & 0x1) == 1); // j > 2, j in odd:
      
          int d, q, c = 0;
      
          for (d = 3; !c && (q = j / d) >= d); d += 2)
              c = (q * d == j); // sets c <- 1 if 'd' is a factor of 'j'
      
          return (c == 0); // prime (true - no 'd' factor) or composite (false)
      }