Cod sursa(job #611410)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 1 septembrie 2011 14:29:49
Problema Divizori Primi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>

#define maxN 1000000

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

int i,j,n,k,t,p,m,u;
int D[maxN+5],Div[maxN+5],A[8][maxN+5];

inline int cb ( int n , int k ){
	
	p = 1 ; u = A[k][0];
	
	while ( p <= u ){
		m = (p + u) >> 1;
		if ( A[k][m] <= n )
			p = m + 1;
		else
			u = m - 1;
	}
	
	if ( !u )	return 0;
	return A[k][u];
}

int main () {
	
	for ( i = 2 ; i <= maxN ; ++i ){
		if ( !Div[i] ){
			for ( j = i + i ; j <= maxN ; j += i ){
				Div[j] = i;
			}
		}
	}
	
	for ( i = 2 ; i <= maxN ; ++i ){
		if ( !Div[i] ){
			D[i] = 1;
		}
		else{
			if ( (i/Div[i])%Div[i] ){
				D[i] = D[i/Div[i]] + 1;
			}
			else{
				D[i] = D[i/Div[i]];
			}
		}
		if ( D[i] > 7 )	continue ;
		A[D[i]][++A[D[i]][0]] = i;
	}
	
	fscanf(f,"%d",&t);
	
	for ( i = 1 ; i <= t ; ++i ){
		fscanf(f,"%d %d",&n,&k);
		fprintf(g,"%d\n",cb(n,k));
	}
	
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}