Language: C

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
#define inf 0x3f3f3f3f
#define min(a,b) (a>b?a:b)
const int maxn=200000;
const int maxm=200000;
int a[200][200];
bool isprm[20000];
bool vis[200][200];
typedef pair<int,int> T;

struct Nod
{
    int b,val,nxt;
    void init(int b,int val,int nxt)
    {
        this->b=b;this->val=val;this->nxt=nxt;
    }
};
//struct Dijkstra
//{
//    Nod buf[200000];int len;
//    int E[maxn],n;
//    int d[maxn];
//    void init(int n)
//    {
//        this->n=n;
//        memset(E,255,sizeof(E));
//        len=0;
//    }
//    void addEdge(int a,int b,int val)
//    {
//        buf[len].init(b,val,E[a]);E[a]=len++;
//    }
//    void solve(int s)
//    {
//        static priority_queue<T,vector<T>,greater<T> >q;
//        while(!q.empty()) q.pop();
//        memset(d,63,sizeof(d));
//        d[s]=0;
//        q.push(T(0,s));
//        int u,du,v,dv;
//        while(!q.empty())
//        {
//            u=q.top().second;
//            du=q.top().first;
//            q.pop();
//            if(du!=d[u]) continue;
//            for(int i=E[u];i!=-1;i=buf[i].nxt)
//            {
//                v=buf[i].b;
//                dv=du+buf[i].val;
//                if(dv<d[v])
//                {
//                    d[v]=dv;
//                    q.push(T(dv,v));
//                }
//            }
//        }
//    }
//}dij;
#define th(x) this->x=x;

struct SPFA
{
    Nod buf[maxm];
    int len;
    int E[maxn],n;
    int d[maxn];
    void init(int n)
    {
        th(n);
        memset(E,255,sizeof(E));
        len=0;
    }
    void addEdge(int a,int b,int val)
    {
        buf[len].init(b,val,E[a]);
        E[a]=len++;
    }
    bool solve(int s)
    {
        static queue<int> q;
        static int  cnt[maxn];
        static bool vis[maxn];

        while(!q.empty())q.pop();
        memset(cnt,0,sizeof(cnt));
        memset(d,63,sizeof(d));
        memset(vis,0,sizeof(vis));
        d[s]=0;
        q.push(s);
        vis[s]=true;
        int u,v;
        while(!q.empty())
        {
            u=q.front();
            q.pop();
            vis[u]=false;
            for(int i=E[u];i!=-1;i=buf[i].nxt)
            {
                v=buf[i].b;
                if(d[u]+buf[i].val<d[v])
                {
                    d[v]=d[u]+buf[i].val;
                    if(!vis[v])
                    {
                        q.push(v);
                        vis[v]=true;
                    }
                    if(++cnt[v]>n)return false;
                }
            }
        }
        return true;
    }
};
SPFA dij;
int main()
{
    memset(a,-1,sizeof(a));
    memset(isprm,1,sizeof(isprm));
    isprm[1]=0;
    for(int i=2;i<20000;i++) if(isprm[i])
        for(int j=i+i;j<20000;j+=i) isprm[j]=0;
    int x=100,y=100,k=1,dir=1,step=1;
    a[x][y]=1;
    while(k<=30000)
    {
        if(dir==1)
        {
            for(int i=0;i<step;i++)
                a[x][++y]=++k;
            dir=2;
        }
        if(dir==2)
        {
            for(int i=0;i<step;i++)
                a[--x][y]=++k;
            dir=3;step++;
        }
        if(dir==3)
        {
            for(int i=0;i<step;i++)
                a[x][--y]=++k;
            dir=4;
        }
        if(dir==4)
        {
            for(int i=0;i<step;i++)
                a[++x][y]=++k;
            dir=1;step++;
        }
    }
    //for(int i=95;i<105;i++,puts("")) for(int j=95;j<105;j++) printf("%3d ",a[i][j]);

    dij.init(20000);
    int dx[]={1,-1,0,0};
    int dy[]={0,0,1,-1};
    for(int i=5;i<195;i++) for(int j=5;j<195;j++)
    {
        if(a[i][j]==-1||isprm[a[i][j]]) continue;
        for(int k=0;k<4;k++)
        {
            int x=dx[k]+i;
            int y=dy[k]+j;
            if(a[x][y]==-1||isprm[a[x][y]]) continue;
            dij.addEdge(a[i][j],a[x][y],1);
            dij.addEdge(a[x][y],a[i][j],1);
        }
    }
    int s,e,cas=1;
    while(scanf("%d%d",&s,&e)!=EOF)
    {
        dij.solve(s);
        int ans=dij.d[e];
        printf("Case %d: ",cas++);
        if(ans==0x3f3f3f3f) puts("impossible");
        else printf("%d\n",ans);
    }
    return 0;
}

//#include <cstdio>
//int main()
//{
//    int n,p,q,cas=1;
//    while(~scanf("%d%d%d",&n,&p,&q))
//    {
//        printf("Case %d: ",cas++);
//        if(q == 0)
//        {
//            if(p == 0)  printf("0.5000\n");
//            else    printf("0.0000\n");
//        }
//        else
//            printf("%.4f\n",q*1.0/p);
//    }
//}

Compiler output:
main.c:1:9: fatal error: cstdio: No such file or directory
    1 | #include<cstdio>
      |         ^~~~~~~~
compilation terminated.