无法为整数

时间:2016-08-12 12:22:36

标签: c++

我试图找到从1到100的素数。我遇到的问题是当程序将值2赋给整数类型的变量j时。变量j的值不会改变。有谁知道为什么会这样?

  

创建一个程序来查找1到100之间的所有素数。

     

执行此操作的一种方法是编写一个函数来检查数字是否为   素数(即,查看数字是否可以除以素数   小于它自己)按顺序使用素数向量(这样如果   vector被称为primes,primes [0] == 2,primes [1] == 3,primes [2] == 5,   等等。)。然后写一个从1到100的循环,检查每个数字   查看它是否是素数,并存储在向量中找到的每个素数。   写另一个循环,列出你找到的素数。你可能会检查   通过将素数向量与素数进行比较得出结果。   考虑2第一个素数。

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<int> primes = { 2 };
    for (int i = 2; i <= 100; ++i) 
        for (int j = 2; j < i; ++j) 
            if (i % j == 0)
                break;
            else
                primes.push_back(j);
    for (int i = 0; i < primes.size(); ++i)
        std::cout << primes[i] << ' ';
}

4 个答案:

答案 0 :(得分:4)

您的初始实施中存在一些错误:

  • 您要在for /r %i in (*) do bcp <tablename> in %i -t "^" -r "\n" -c -C 28591 -S <databaseinstance> -U <username> -P <password> 向量
  • 中过早添加元素
  • 你没有明确定义任何你认为是素数
  • 您正试图将所有内容都放在一个功能中

一些清理过的代码看起来有点类似:

primes

然而,由于这个问题看起来像是家庭作业,所以不要盲目复制这个问题,并尝试先了解这里使用的所有概念。

答案 1 :(得分:1)

#include <vector>
#include <iostream>
#include <string>

int main()
{
  std::vector<int> primes;
  primes.push_back(2);
  for(int i=3; i < 100; i++)
  {
      bool prime=true;
      for(int j=0;j<primes.size() && primes[j]*primes[j] <= i;j++)
      {
          if(i % primes[j] == 0)
          {
             prime=false;
             break;
          }
      }
      if(prime) 
      {
         primes.push_back(i);
         std::cout << i << " ";
      }
  }

   return 0;
}

这将打印出以下内容:

3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

我们跟踪所有先前计算的素数。如果一个数字可以被非素数除尽,那么还有一些素数&lt; =该除数,它也可以被除数。这会使计算减少一个primes_in_range / total_range。

答案 2 :(得分:0)

对于初学者而言,作业中写有编写函数,使用素数向量检查数字是否为素数。

此循环

   for (int j = 2; j < i; ++j) 
        if (i % j == 0)
            break;
        else
            primes.push_back(j);

没有意义,因为它不使用向量来检查i是否可以被向量的元素整除。如果我不能被向量的任何元素整除,那么在循环之后还应该向向量添加一个新的素数。

还要考虑到作业中写有

  

然后写一个从1到100 的循环,检查每个数字   看看它是否是一个主要的

因此,只有下面显示的代码才能满足作业。:)

该程序可以通过以下方式查看。我没有使用int类型,而是使用了unsigned int类型,因为您只检查非负值。

#include <iostream>
#include <vector>

bool is_prime( const std::vector<unsigned int> &primes, unsigned int x )
{
    std::vector<unsigned int>::size_type i = 0;

    while ( i < primes.size() && x % primes[i] != 0 ) ++i;

    return x != 1 && i == primes.size();        
}


int main() 
{
    const unsigned int N = 100;
    std::vector<unsigned int> primes;

    for ( unsigned int i = 1; i <= N; ++i )
    {

        if ( is_prime( primes, i ) ) primes.push_back( i );
    }

    for ( unsigned int x : primes ) std::cout << x << ' ';
    std::cout << std::endl;

    return 0;
}

程序输出

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 

答案 3 :(得分:0)

//Thank you for all your answers, but I just figured out why. The codes are following:

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<int> primes = { 2 };
    for (int i = 2; i <= 100; ++i) 
        for (int j = 2; j < i; ++j) {
            if (i % j == 0)
                break;
            if (j == i - 1)
                primes.push_back(i);
        }
    for (int x: primes)
        std::cout << x << ' ';
    return 0;
}