素数检查器不包含数字10的某些乘数

时间:2019-05-16 16:13:37

标签: c++ loops

我需要编写一个程序来检查(a)中键入的数字及其镜像自身(a1)是否均为质数。在输入乘数10的情况下,它一直工作到这种情况,在这种情况下,它将其声明为质数,但显然不是。

我已经尝试设置条件:

  

if(a%10 = 0){//声明为非素数}

完成此操作后,输入数字后,我总是得到0的返回值。还尝试声明:

  

if(a == 1){//声明为非素数}

将其固定为10乘以100的乘数,但其余的将给我前面所述的错误。

我去找

#include <iostream>

using namespace std;

int main() {
  int a, a1, DN;
  cin >> a;
  DN = a;
  a1 = 0;

  for (; a != 0;) {
    a1 *= 10;
    a1 = a1 + a % 10;
    a /= 10;
  }

  int este_prim, i, este_prim2;
  este_prim = 1;
  i = 2;
  este_prim2 = 1;
  while (i < DN && i < a1) {
    if (DN % i == 0) {
      este_prim = 0;
    }
    ++i;
  }

  if (a1 > i && a1 % i == 0) {
    este_prim2 = 0;
  }
  ++i;

  if (a == 1) {
    este_prim = 0;
  }
  if (a1 == 1) {
    este_prim2 = 0;
  }

  if (este_prim2 == 1 && este_prim == 1) {
    cout << "DA";
  } else {
    cout << "NU";
  }

  return 0;
}

我是一个完全的新手,因此我们将不胜感激。干杯!

1 个答案:

答案 0 :(得分:1)

您的循环检查DN是否为素数,但不检查a1是否为素数。而且我不理解这段代码。

if (a1 > i && a1 % i == 0) {
  este_prim2 = 0;
}

所以就删除它。

使用此有价值的帮助函数来检测正数是否为质数:

bool isPrime(int x)
{
    if (x <= 1)
        return false;

    // 2 is the only even prime    
    if (x == 2)
        return true;

    // any other even number is not prime
    if ((x % 2) == 0)
        return false;

    // try dividing by all odd numbers from 3 to sqrt(x)    
    int stop = sqrt(x);

    for (int i = 3; i <= stop; i += 2)
    {
        if ((x % i) == 0)
            return false;
    }
    return true;
}

然后用于检测DN及其镜像a1是否都是素的代码是这样的:

int main() {
  int a, a1, DN;
  cin >> a;
  DN = a;
  a1 = 0;

  for (; a != 0;) {
    a1 *= 10;
    a1 = a1 + a % 10;
    a /= 10;
  }
  bool este_prim, este_prim2;
  este_prim = isPrime(DN);
  este_prim2 = isPrime(a1);
  if (este_prim2 && este_prim) {
    cout << "DA";
  } else {
    cout << "NU";
  }
}