Cod sursa(job #1391701)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 18 martie 2015 09:20:47
Problema Dtcsu Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <bitset>
#include <cstring>
#define read 276997
using namespace std;
ifstream f("dtcsu.in");
ofstream g("dtcsu.out");
bitset <4000000> v;
const int mod[]={3682663,1632563,1282653,3182643,2682664,682663};
long long x;
int q,sol;
char s[20];


int main()
{
    int i,j;

    for (i=1;i<=read;i++) {
        memset(s,0,sizeof(s));
        f.getline(s,20);
        x=0;
        j=0;
        while (s[j]!=NULL) {
            x=x*10+s[j]-'0';
            j++;
        }
        if (x&1)
        for (j=0;j<=5;j++)
            v[x%mod[j]]=1;
    }

    f>>q;f.get();
    for (i=1;i<=q;i++) {
        memset(s,0,sizeof(s));
        f.getline(s,20);
        x=0;
        j=0;
        while (s[j]!=NULL) {
            x=x*10+s[j]-'0';
            j++;
        }
        if (x==0)
            continue;
        x/=(x^(x-1))&x;
        for (j=0;j<=5;j++)
            if (v[x%mod[j]]==0) {
                x=0;
                break;
            }
        if (x==0)
            continue;

        while ((x/11)*11==x)
            x/=11;
        while ((x/7)*7==x)
            x/=7;

        while ((x/25)*25==x)
            x/=25;
        if ((x/5)*5==x)
            x/=5;

        while ((x/9)*9==x)
            x/=9;
        if ((x/3)*3==x)
            x/=3;



        if (x==1)
            sol++;
    }
    g<<sol;

    return 0;
}