Primes reversibles de la PTA (20 分)

Es la mente humana la que libera la luz infinita, y también es la mente humana la que crea la oscuridad ilimitada. La luz y la oscuridad se entrelazan y luchan juntas. Este es el mundo por el que estamos nostálgicos y desamparados.

Un  primo reversible  en cualquier sistema numérico es un primo cuyo "reverso" en ese sistema numérico también es un primo. Por ejemplo, en el sistema decimal 73 es un primo reversible porque su reverso 37 también es primo.

Ahora, dados dos enteros positivos cualesquiera N (<10 5) y D (1 <D≤10), se supone que debes saber si N es un primo reversible con raíz D.

Especificación de entrada:

El archivo de entrada consta de varios casos de prueba. Cada caso ocupa una línea que contiene dos números enteros N y D. La entrada termina con un N. negativo.

Especificación de salida:

Para cada caso de prueba, imprima en una línea  Yes si N es un primo reversible con base D, o  No si no.

Entrada de muestra:

73 10
23 2
23 10
-2

Salida de muestra:

Yes
Yes
No
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX

//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=3e5+10;
queue<int>q;
int p[101100],n,d;
void init()
{
    memset(p,0,sizeof p);
    p[1]=1;
    for(int i=2; i<=101000; i++)
    {
        if(p[i]==0)
        {
            for(int j=2; j*i<=101000; j++)
                p[i*j]=1;
        }
    }
    return ;
}
int main()
{
    init();
    while(~scanf("%d",&n))
    {
        if(n<0)
            break;
        scanf("%d",&d);
        if(p[n]==1)
            printf("No\n");
        else
        {
            while(!q.empty())
                q.pop();
            int k=n;
            while(k)
            {
                q.push(k%d);
                k=k/d;
            }
            k=0;
            while(!q.empty())
            {
                k=k*d+q.front();
                q.pop();
            }
            if(p[k]==0)
                printf("Yes\n");
            else
                printf("No\n");
        }
    }
    return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_44170305/article/details/108430208
Recomendado
Clasificación