AcWing 1356. 回文质数
原题链接
简单
作者:
小枫owo
,
2024-04-22 00:14:18
,
所有人可见
,
阅读 2
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int l = 0;
int a[100100];
int Min, Max;
int Reversal(int c)
{
int d[10],t;
int i = 0;
while (c >= 10)
{
t = (c / 10) * 10;
d[i] = c - t;
c = c / 10;
i++;
}
d[i] = c;
c = 0;
for (int j = 0; j <= i; j++)
c += d[j] * pow(10, i - j);
return c;
}
void Push_back(int b,int size,int n)
{
int c;
if (size > 1)
{
c = b / pow(10,n);
c = Reversal(c);
b += c;
if(b>=Min&&b<=Max)
a[l++] = b;
}
else
{
if (b >= Min && b <= Max)
a[l++] = b;
}
}
void Work(int a, int size, int n)
{
if ((size / 2 + size % 2 )== n)
{
Push_back(a, size, n);
return;
}
for (int i = 0; i < 10; i++)
Work(a+i*pow(10,size-n-1),size,n+1);
}
bool sushu(int n)
{
if (n == 1)
return false;
for (int i = 2; i <= n / i; i++)
{
if (n % i == 0)
return false;
}
return true;
}
int main()
{
cin >> Min >> Max;
for (int i = 1; i < 9; i++)
for (int j = 1; j < 10; j++)
Work(j * pow(10, i - 1), i, 1);
for (int i = 0; i < l; i++)
if (sushu(a[i]))
cout << a[i] << endl;
}