Думаю, я нашел проблему в вашем коде. Проблема заключается в вашей функции nearPrime. Он будет работать для большинства чисел, которые он принимает в качестве аргумента, но это не тот случай, если вы введете число 1 для этой функции. Подумайте, что произойдет, если это займет число 1.
Тогда ваша переменная lp = (1 - 1) = 0. Когда вы затем введете ее в простую функцию, она не вернет 1 из-за способа ее реализации. Затем вы продолжаете уменьшать это число, если простое число не найдено, и поскольку число теперь отрицательное, оно никогда не будет даже входить в цикл for в функции простого числа, а функция простого числа всегда будет возвращать 0. Таким образом, вы застрянете в цикл while (ok! = 1) действительно долгое время, и поэтому ваш процесс завершается. Чтобы это исправить, убедитесь, что вы проверили lp! = 0, прежде чем переходить к циклу. Поскольку вы также проверяете ближайшее простое число, вам также необходимо проверить, равно ли lp 0, прежде чем возвращать значение. Короче, внесите следующие изменения в свой код.
int nearPrime(int b)
{
int lp, bp, ok = 0, p;
lp = b - 1;
bp = b + 1;
if (lp != 0)
{
while (ok != 1) {
if (prime(lp) == 1) {
ok = 1; break;
}
lp--;
}
}
ok = 0;
while (ok != 1) {
if (prime(bp) == 1) {
ok = 1; break;
}
bp++;
}
if (((b - lp) < (bp - b)) && lp != 0) {
p = lp;
}
else p = bp;
return p;
}
Еще одна вещь: ваша функция readMatrix, похоже, ожидает возвращаемый тип int, но вы возвращаете матрицу аргументов, которая имеет тип int **. Кроме того, в вашем основном коде вы на самом деле ничего не делаете со своим возвращаемым значением, поэтому, вероятно, измените тип возврата вашей функции readMatrix на void (и, конечно, не возвращайте матрицу).