Cod sursa(job #1434929)

Utilizator VictorDumitrescuDumitrescu Victor VictorDumitrescu Data 11 mai 2015 17:57:34
Problema Divizori Primi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>
#define MAX 1000001

FILE *f, *g;

using namespace std;
int d[MAX];
struct intrb
{
    int lim, div, poz, rez;
};
intrb v[MAX];
int comp(intrb i, intrb j)
{
    return i.div < j.div;
}
int comp2(intrb i, intrb j)
{
    return i.poz < j.poz;
}
void nrdiv()
{
    int i, j;
    for(i = 2; i < MAX; i++)
        if (d[i] == 0)
            for(j = i; j < MAX; j += i)
                d[j]++;

}

int main()
{   int n, aux, i;
    f = fopen("divprim.in", "r");
    fscanf(f, "%d", &n);
    nrdiv();
    g = fopen("divprim.out", "w");
    for(i = 1; i <= n; i++)
    {
        fscanf(f, "%d%d", &v[i].lim, &v[i].div);
        v[i].poz = i;


        /*int j = 0;
        aux = 0;
        while(j <= x)
        {
            if(d[j] == y)
                aux = j;
            j++;
        }
        fprintf(g,"%d\n", aux);
        */
    }
    sort(v + 1, v + n + 1, comp);
    i = 1;
    int j = 0;
    aux = v[i].div;
    while(i <= n)
    {
        while(aux == v[i].div)
        {
            while(j <= v[i].lim)
            {
                if(d[j] == v[i].div)
                    v[i].rez = j;
                j++;
            }
            i++;

        }
        aux = v[i].div;
        j = 0;
    }
    sort(v + 1, v + n + 1, comp2);
    for(i = 1; i <= n; i++)
    {
        fprintf(g, "%d\n", v[i].rez);
    }
    fclose(f);
    fclose(g);
    return 0;
}