Cod sursa(job #874477)

Utilizator Master011Dragos Martac Master011 Data 8 februarie 2013 16:03:05
Problema Barbar Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<cstdio>
using namespace std;

int marcate[30001];

void ciur(){
   int d=2;
   while(d*d<=30000){
       for(int i=d;i<=30000/d;i++)
        marcate[i*d]=1;
    if(d==2)
        d++;
    else
        d+=2;
    while(marcate[d]==1)
        d+=2;
   }
    return;
}

int prime[15100],nrp=0;

struct solutie {int a; int b;};

solutie sol[15100];

int main()
{
    FILE *in,*out;
    in=fopen("secvente1.in","r");
    out=fopen("secvente1.out","w");
    marcate[1]=1;
    ciur();
    int D,n,p,k,nr,st,sf,cont=0;
    fscanf(in,"%d",&D);
    for(int i=1;i<=D;i++){
        fscanf(in,"%d%d%d",&n,&p,&k);
        nrp=0;
        for(int j=1;j<=n;j++){
            fscanf(in,"%d",&nr);
            if(nr%p==0){
                while(nr%p==0)
                    nr/=p;

                if(nr==1)
                    prime[++nrp]=j;
            }
            if(marcate[nr]==0)
                prime[++nrp]=j;

        }
        st=1;
        sf=k;
        cont=0;
        while(sf<=nrp){
            sol[++cont].a=prime[st];
            sol[cont].b=prime[sf];
            st++;
            sf++;
        }
        fprintf(out,"%d\n",cont);
        for(int j=1;j<=cont;j++)
            fprintf(out,"%d %d\n",sol[j].a,sol[j].b);
    }
    fclose(in);
    fclose(out);
    return 0;
}