Cod sursa(job #1039564)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 23 noiembrie 2013 11:58:14
Problema Dtcsu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<fstream>
#include<bitset>
#include<stdio.h>
 
using namespace std;
 
#define max_mod 990469
#define init_v 276997
 
ifstream f("dtcsu.in");
ofstream g("dtcsu.out");
 
bitset<max_mod> H;
 
int Prime[4] = {3 , 990397 , 990463 , 990469};
int fact[6] = {5 , 2 , 3 , 5 , 7 , 11};
long long x;
int q , nr;
char str[30]; 

void fhash( int mod , long long v ){
    H.set(v%mod);
}
 
bool querry( int mod , long long v ){
    return H.test(v%mod);
}
 
void read(){
	
    for( int j , i = 1 ; i <= init_v ; i++ ){
        f.getline(str , 30);
		sscanf(str , "%lld" , &x);
		
        for( j = 1 ; j <= Prime[0] ; j++ )
            fhash(Prime[j] , x);
		
    }
	
}
 
bool test( long long v ){
	
    for( int i = 1 ; i <= fact[0] ; i++ ){
        while( v % fact[i] == 0 )
            v /= fact[i];
    }
	
    return v == 1;
}
 
int main(){
	
    read();
	
    f>>q; f.getline(str , 30);
	
    for( int j , i = 1 ; i <= q ; i++ ){
        f.getline(str , 30);
		sscanf(str , "%lld" , &x);
		
        for( j = 1 ; j <= Prime[0] ; j++ )
            if( querry(Prime[j] , x) == 0 )
                break;
		
        if( j <= Prime[0] )
            continue;
		
        if( test(x) )
            nr++;
		
    }
	
    g<<nr<<"\n";
	
    return 0;
}