Prime checker не включает в себя некоторые множители числа 10 - PullRequest
0 голосов
/ 16 мая 2019

Мне нужно создать программу, которая проверит, являются ли число, введенное в (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 Ответ

1 голос
/ 16 мая 2019

Ваш цикл проверяет, является ли 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";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...