Pagini recente » Monitorul de evaluare | Cod sursa (job #2413344) | Cod sursa (job #1343087) | Cod sursa (job #1421046) | Cod sursa (job #1164621)
#include<fstream>
#include<bitset>
using namespace std;
#define nr_linii 276997
FILE*f = fopen("dtcsu.in" , "r");
FILE*g = fopen("dtcsu.out" , "w");
int fact[] = { 0 , 2 , 3 , 5 , 7 , 11 };
long long n , nr , aux;
char sir[100];
int sol;
bitset< 1<<22 >H1;
bitset< 1<<21 >H2;
inline void get_nr( long long &nr ){
fgets( sir , 100 , f );
nr = 0;
int k = 0;
while( sir[k] >= '0' && sir[k] <= '9' ){
nr = nr*10 + sir[k] - '0';
}
}
inline long long hash1( long long nr ){
return (nr >> 23LL) & ((1LL << 22) - 1);
}
inline long long hash2( long long nr ){
return (nr >> 3LL) & ((1LL << 21) - 1);
}
inline void read(){
for( int i = 1 ; i <= nr_linii ; i++ ){
get_nr( nr );
H1[hash1(nr)] = true;
H2[hash2(nr)] = true;
}
}
inline bool verif( long long nr ){
return H1[hash1(nr)] & H2[hash2(nr)];
}
int main(){
read();
get_nr( n );
for( int i = 1 ; i <= n ; i++ ){
get_nr( nr );
if( nr & (-nr) )
nr /= (nr & (-nr));
while( nr > 1 && (( aux = nr/15 ) * 15 == nr) ){
nr = aux;
}
if( verif( nr ) ){
for( int j = 1 ; j <= 5 ; j++ ){
while( nr > 1 && (( aux = nr/fact[j] ) * fact[j] == nr) ){
nr = aux;
}
}
if( nr == 1 ){
sol++;
}
}
}
fprintf( g , "%d" , sol );
return 0;
}