素数赋值基本c ++

时间:2013-10-15 06:59:44

标签: c++

这是我的任务: 素数是一个大于1的数字,它只能被1和它自己整除。对于此分配,您将找到从2到n的数字(其中n是用户指定的数字)是素数。

向用户询问一个n,大于2的数字。继续询问一个数字,直到提供大于2的数字。假设用户只输入数字(也就是说,您不需要检查用户是否输入文本)。

使用循环迭代变量i,从2到n。对于每次迭代,检查从2到i的所有数字以确定该数字是否为素数。如果是素数,请打印出i和单词“Prime”。

使用模数运算符%来确定数字是否为素数

这是我到目前为止所拥有的。它不起作用。我不知道为什么。请帮助,我是一名商业学生,选修基础课程。

#include <iostream>

using namespace std;

int main()
{
  int n;
  int i;
  int x;

  while (n<=2)
  {
    cout << "Enter a number greater then 2: \n";
    cin >> n;

    for (x=n; x>=2; x--)
    {
      bool prime = false;
      for (i=2; i<x; i++)
      { 
        if (x%i==0)
        {
          prime = true;
        }
      }
      if (prime==false)
      {
        cout << x << " Prime.\n";
      }
    }
  }
  return 0;
}

5 个答案:

答案 0 :(得分:0)

我实际上没有使用你的代码因为身份验证它有点难以阅读。但是我为你写了一个新方法。我建议总是将代码划分为方法以使其更易于管理。您可以在主方法中调用它

bool checkPrime(int number)
{   // input:   num an integer > 1
    // Returns: true if num is prime
    //          false otherwise.

    int i;

    for (i=2; i<number; i++)
    {
        if (number % i == 0)
        {
            return false;
        }
    }

    return true;    
}

以下是如何在主要方面调用此方法:

int main() {

int number;

cout << "Enter an integer (>1): ";
cin >> number;

if (checkPrime(number))
{
    cout << number << " is prime." << endl;
}
else
{
    cout << number << " is not prime." << endl;
}

// I think this is more convention than anything.
return 0;

}

答案 1 :(得分:0)

它可能不是最佳程序,但这应该有效:

#include <iostream>

using namespace std;

int main()
{
int n;
int i;
int x;

cout << "Enter a number greater then 2: \n";
cin >> n;

while (n<=2)
{
 cout << "Enter a number greater then 2: \n";
 cin >> n;
}

for (x=n; x>=2; --x)
{
  for (i=2; i<x; ++i)
  { 
    bool prime = true;
    for (j=2; j<i/2; ++j)
    { 
       if (i%j==0)
       {
         prime = false;
         break;
       } 
    }
    if (prime)
    {
       cout << j << " Prime.\n";
    }
  }
}
return 0;
}

答案 2 :(得分:0)

有两种简单的方法可以加快速度:首先不需要测试太大的潜在除数(如arne所指出的),其次,除了2之外,没有必要测试偶数。

这样的事情:

#include <cassert>
bool is_prime(unsigned n)
{
  if (n == 2)
    return true;
  if (n <= 1
      || n % 2 == 0)
    return false;
  for (int d = 3; d * d < n; ++d)
    if (n % d == 0)
      return false;
  return true;
}

int main()
{
  assert(!is_prime(0));
  assert(!is_prime(1));
  assert(is_prime(2));
  assert(is_prime(3));
  assert(!is_prime(4));
  assert(is_prime(5));
  assert(!is_prime(6));

  assert(!is_prime(256));
  assert(is_prime(257));
}

当然,更快的是建立素数表,并使用此表作为潜在的除数,而不是每个奇数。如果你有几个要检查的数字,这是有道理的。

答案 3 :(得分:0)

请说,为什么它让你说它不起作用?其中我得到了这个输出。

Enter a number greater then 2: 
100
97 Prime.
89 Prime.
83 Prime.
79 Prime.
73 Prime.
71 Prime.
67 Prime.
61 Prime.
59 Prime.
53 Prime.
47 Prime.
43 Prime.
41 Prime.
37 Prime.
31 Prime.
29 Prime.
23 Prime.
19 Prime.
17 Prime.
13 Prime.
11 Prime.
7 Prime.
5 Prime.
3 Prime.
2 Prime.

但是当int n;使n未初始化时,可能不会输入while循环。

答案 4 :(得分:-1)

我认为答案1函数checkprime(int number)可以改进但纯粹基于性能基础,考虑素数不能是偶数的事实。所以如果添加额外的检查以查看(数字%2 == 0)将减少for循环的大量迭代,对于其余的我认为迭代循环从2到9足够而不是2到n。迭代次数过多会减慢你的数量。