Наибольшее число палиндром, которое является произведением двух простых пятизначных чисел

1,00
р.
Делал приложение по ТЗ из одной компании. Сделал андроид-аппку, получил результат на эмуляторе, вроде же верный. Но HR просто отписалась, что ответ который выдало мое приложение неверен. Айчары люди довольно занятые, потому редко кто может указать на ошибку, а навязываться после отказа - дело очень неблагодарное. Но все же хочется хоть для себя выполнить задание до конца.
Из требований было:
Напишите программу, которая возвращает наибольшее число палиндром, которое является произведением двух простых пятизначных чисел, а также возвращает сами сомножители. Простое число - это натуральное число, которое делится нацело только на 1 и на себя само (2, 3, 5, 7, 11, …) Палиндром – строка, которая читается одинаково в обоих направлениях (например ABBA)
Сам принцип поиска простых чисел мне понятен. Использовать массивы было нецелесообразно потому решето Эратосфена и аналоги пришлось отбросить - уж очень много памяти сожрало бы создание массива на такое количество значений.
Потому решил использовать циклы для сопоставления и отсеивания.
Вот код моего андроид-приложения:
MainActivity:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private int maxNum = 99999 private int minNum = 10000
private int divNumMax = 0 private int palind
private TextView tv1 private TextView tv2 private TextView tv3 private TextView tv4
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)
tv1 = (TextView) findViewById(R.id.textView1) tv2 = (TextView) findViewById(R.id.textView2) tv3 = (TextView) findViewById(R.id.textView3) tv4 = (TextView) findViewById(R.id.textView4)
Button btnStart = (Button) findViewById(R.id.button) btnStart.setOnClickListener(this)
}
@Override public void onClick(View v) {
divNumMax = (int) Math.sqrt(maxNum)
int fPM int sPM boolean isNotPalind
fPM = findMaxPrimeNumber(maxNum) sPM = findMaxPrimeNumber(fPM - 2) isNotPalind = findPalindrome(fPM, sPM)
while (isNotPalind) {
if (sPM <= fPM && sPM > minNum) { sPM = findMaxPrimeNumber(sPM - 2) isNotPalind = findPalindrome(fPM, sPM)
} else if (sPM <= minNum) { fPM = findMaxPrimeNumber(fPM - 2) sPM = fPM }<br> tv2.setText("1-st primary number: " + fPM) tv3.setText("2-nd primary number: " + sPM) tv4.setText("1-st * 2-nd = " + palind)
} }
private int findMaxPrimeNumber(int maxNumPre) { int i int j int z int maxNumNew
for (i = maxNumPre i >= minNum i = i - 2) {
for (j = 3 j <= divNumMax j++) {<br> z = i % j
if (z == 0 && j <= divNumMax) { break <br> } else if (z != 0 && j == divNumMax) { maxNumNew = i return maxNumNew
} }
} return 10000 }
private boolean findPalindrome(int firstPrime, int secondPrime) {
int resultOfMath = firstPrime * secondPrime
String ltrResult = Integer.toString(resultOfMath) String rtlResult = new StringBuffer(ltrResult).reverse().toString()
if (ltrResult.equals(rtlResult)) {
palind = resultOfMath return false
} else { return true } } }
Скриншот полученного результата на эмуляторе:

Ломаю голову где ошибся, что упустил. Не прошу делать за меня ТЗ, но не хочу оставлять позади какую-то неразобранную проблемму.

Ответ
Ваше целое несколько раз завернулось вокруг максимального значения int - 2,147,483,647.
Проверьте:
99923 * 87541 = 8 747 359 343
А также:
На какую цифру должно заканчиваться произведение Ваших двух простых чисел?