使用bool值的素数查找程序

时间:2015-03-14 01:36:50

标签: c++ boolean

我正在尝试用C ++编写一个程序,给定一个包含随机整数的数据文件,将每个整数标识为素数或非素数,并计算整数。以下是我到目前为止的情况:

#include <iostream>
using namespace std;
int main()
    {
  int number;  //number to be tested
  int  count = 0;  //count of integers in file
  cin >> number;
  while (cin)
    {
      bool prime = true;
  if (number <= 0)
    {
      prime = false;
    }
  else
    {
      for (int i=2; i<number; i++)
      if (number % i == 0)
         { 
           prime = false;
           break;
         }
    }

  if (prime = true)
        cout << number << " is a prime number." << endl;
  if (prime = false)
        cout << number << " is not a prime number." << endl;
  cin >> number;  
  count++;
 } 
cout << "The file contains " << count << " integers" << endl;
return 0;
}

程序编译,但发现数据集中的所有值都不是素数。以下是我从数据文件输出的内容:

24是素数 13是素数 18是素数 -25是素数。
42是素数 0是素数。
2是素数 该文件包含7个整数

有什么建议吗?我正确使用bool值吗? 谢谢

2 个答案:

答案 0 :(得分:2)

在检查=是真还是假时,您正在使用赋值运算符==而不是相等比较运算符prime。 (您还应该为for循环使用大括号。)

请注意,您可以检查这些因素,直到prime/2(或sqrt(prime),见下文),因为不超过一半的数字可能是它的一个因素!

答案 1 :(得分:0)

这一行:

if (prime = true)
        cout << number << " is a prime number." << endl;

将“true”赋给变量“prime”。作为表达式,赋值操作返回指定的值,因此if中的表达式计算为true,因此打印出该数字为prime。

您必须通过==更改=。避免这些错误的一个老技巧是改变句子:

if (true = prime)
        cout << number << " is a prime number." << endl;

然后编译器警告你这个明显​​的错误。