Палиндром с простым числом
Суть задания написать наибольший простой палиндром не больше N. У меня есть код, но он работает до определенных чисел, а именно после 1900 он всегда выдает 1, где ошибка? Microsoft Visual studio
#include <stdio.h>
int main()
{
int n;
int con = 0;
int h;
int d;
int schet = 0;
scanf_s("%d", &h);
if (h <= 100) { // костыль для 100
printf("%d", 1);
}
for (n = 1; n <= h; n++)
{
for (d = 2; d < (h / 2); d++)
{
if (n % d == 0)
{
schet = schet + 1;
}
}
if (schet == 0)
{ //палиндром
int reverse = 0;
int golov = n;
while (golov != 0)
{
reverse = reverse * 10;
reverse = reverse + golov % 10;
golov = golov / 10;
}
if (n == reverse)
{
con = n;
}
}
schet = 0;
}
printf("%d", con);
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
schet обнуляйте на каждой итерации внешнего цикла. Пардон, увидел обнуление в конце.
Кроме того, внешний цикл разумно запустить в обратную сторону и останавливаться после первого найденного палиндрома.
И поиск простых нужно останавливать, когда делитель попался, да и искать лучше до достижения условия d * d < n - заметьте, что у вас там вообще h использовалось - запутались в своих непонятных переменных, как вам в комментариях подсказали.
for (n = h; n > 100; n--)
{
schet = 0;
for (d = 2; d*d < n; d++)
{
if (n % d == 0)
{
schet = 1;
break;
}
}
if (schet == 0)
{ //палиндром
int reverse = 0;
int golov = n;
while (golov != 0)
{
reverse = reverse * 10;
reverse = reverse + golov % 10;
golov = golov / 10;
}
if (n == reverse)
{
con = n;
break;
}
}
}