Cod sursa(job #1031154)

Utilizator IoannaPandele Ioana Ioanna Data 15 noiembrie 2013 17:31:04
Problema Dtcsu Scor 20
Compilator cpp Status done
Runda FMI No Stress 4 Marime 4.41 kb
#include <cstdio>
#include <cstring>

using namespace std;

int q;
long long n;
int nr;
char s[100];
int d[] = {2,3,5,7,11};
long long p2[] = {2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648,4294967296,8589934592,17179869184,34359738368,68719476736,137438953472,274877906944,549755813888,1099511627776,2199023255552,4398046511104,8796093022208,17592186044416,35184372088832,70368744177664,140737488355328,281474976710656,562949953421312,1125899906842624,2251799813685248,4503599627370496,9007199254740992,18014398509481984,36028797018963968,72057594037927936,144115188075855872,288230376151711744,576460752303423488,1152921504606846976};
long long p3[]= {3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14348907,43046721,129140163,387420489,1162261467,3486784401,10460353203,31381059609,94143178827,282429536481,847288609443,2541865828329,7625597484987,22876792454961,68630377364883,205891132094649,617673396283947,1853020188851841,5559060566555523,16677181699666569,50031545098999707,150094635296999121,450283905890997363,1350851717672992089};
long long p5[] ={5,25,125,625,3125,15625,78125,390625,1953125,9765625,48828125,244140625,1220703125,6103515625,30517578125,152587890625,762939453125,3814697265625,19073486328125,95367431640625,476837158203125,2384185791015625,11920928955078125,59604644775390625,298023223876953125,1490116119384765625};
long long p7[] = {7,49,343,2401,16807,117649,823543,5764801,40353607,282475249,1977326743,13841287201,96889010407,678223072849,4747561509943,33232930569601,232630513987207,1628413597910449,11398895185373143,79792266297612001,558545864083284007,3909821048582988049};
long long p11[]= {11,121,1331,14641,161051,1771561,19487171,214358881,2357947691,25937424601,285311670611,3138428376721,34522712143931,379749833583241,4177248169415651,45949729863572161,505447028499293771,5559917313492231481};


FILE *f = fopen("dtcsu.in","r");
FILE *g = fopen("dtcsu.out","w");


int cautbin2() {
    int st = 0;
    int dr = 59;
    int m;
    int p=0;
    while (st<=dr) {
        m=(st+dr)/2;
        if (n%p2[m] == 0) {
            p = m;
            st = m+1;
        } else {
            dr = m-1;
        }
    }
    n=n/p2[p];
}

int cautbin3() {
    int st = 0;
    int dr = 37;
    int m;
    int p=0;
    while (st<=dr) {
        m=(st+dr)/2;
        if (n%p3[m] == 0) {
            p = m;
            st = m+1;
        } else {
            dr = m-1;
        }
    }
    n=n/p3[p];
}

int cautbin5() {
    int st = 0;
    int dr = 25;
    int m;
    int p=0;
    while (st<=dr) {
        m=(st+dr)/2;
        if (n%p5[m] == 0) {
            p = m;
            st = m+1;
        } else {
            dr = m-1;
        }
    }
    n=n/p5[p];
}

int cautbin7() {
    int st = 0;
    int dr = 21;
    int m;
    int p=0;
    while (st<=dr) {
        m=(st+dr)/2;
        if (n%p7[m] == 0) {
            p = m;
            st = m+1;
        } else {
            dr = m-1;
        }
    }
    n=n/p7[p];
}

int cautbin11() {
    int st = 0;
    int dr = 17;
    int m;
    int p=0;
    while (st<=dr) {
        m=(st+dr)/2;
        if (n%p11[m] == 0) {
            p = m;
            st = m+1;
        } else {
            dr = m-1;
        }
    }
    n=n/p11[p];
}

void read() {
    for (int i = 1; i <=  276997 ;i++)
        fgets(s,99,f);
    fgets(s,99,f);
    q = 0;
    int lim = strlen(s);
    if (s[lim-1] == '\n') lim--;
    for (int j = 0; j < lim; j++) {
       q = q*10 + s[j] - '0';
    }
    }


void rez() {
    int h;
  //  h = q/4;
    for (int i=1;i <= q; i++) {
        fgets(s,99,f);

        int lim = strlen(s);
        if (s[lim-1] == '\n') lim--;
        n = 0;
        for (int j = 0; j < lim; j++) {
            n = n*10 + s[j] - '0';
        }
        if (n%2==0)
            cautbin2();
        if (n%3==0)
            cautbin3();
        if (n%5==0)
            cautbin5();
        if (n%7 ==0)
            cautbin7();
        if (n%11 == 0)
            cautbin11();
      /*  for (int j = 0; j < 5 && n > 1; j++)
        {
            while (n%d[j] == 0) {
                n/=d[j];
            }
        }*/
        if (n==1) nr++;
    }
    fprintf(g,"%d",nr);
}

int main()
{

    read();
    rez();
    return 0;
}