Cod sursa(job #1691366)

Utilizator savulescustefanSavulescu Stefan savulescustefan Data 18 aprilie 2016 09:15:28
Problema Secventa Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>

using namespace std;
int i,j,nr,n,r,b[26004],c[24],e[30004],k,p,q,x,f[100004],d,k1;
bool a[300004];
int main()
{
    freopen ("secvente1.in","r",stdin);
    freopen ("secvente1.out","w",stdout);
    scanf ("%d", &d);
    b[1]=2;
    nr=1;
    for (i=3;i<=300000;i+=2)
    {
        if (a[i]==false)
        {
            b[++nr]=i;
            if (i<=1000)
            {
                for (j=i;(j*i)<=300000;j+=2)
                    a[i*j]=true;
            }
        }
    }
    for (i=1;i<=d;i++)
    {
        scanf ("%d %d %d", &n, &p, &k1);
        r=1;
        c[1]=1;
        x=1;
        q=0;
        while (x<=(30000/p))
        {
            x*=p;
            c[++r]=x;
        }
        for (j=1;j<=nr;j++)
        {
            for (k=1;k<=r;k++)
            {
                if (b[j]<=(30000/c[k]))
                    e[b[j]*c[k]]=i;
            }
        }
        for (j=1;j<=n;j++)
        {
            scanf ("%d", &x);
            if (e[x]==i)
                f[++q]=j;
        }
        if (q>=k1)
        {
            printf ("%d\n", q-k1+1);
            for (j=1;j<=(q-k1+1);j++)
                printf ("%d %d\n", f[j], f[j+k1-1]);
        }
        else
            printf ("%d\n", 0);
    }
    return 0;
}