Cod sursa(job #489958)

Utilizator robigiirimias robert robigi Data 4 octombrie 2010 11:52:38
Problema Divizori Primi Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <cstdio>
#include <cstring>

using namespace std;

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

typedef struct ciur
{
	int nr;
	bool k;
};

ciur cv[1000000];

int t;


int erathostenes(int n, int k)
{
	memset(cv, 0, sizeof(cv));
	for (int m=2; m<=n; m+=2)
	{
		cv[m].nr++;
		cv[m].k=1;
	}

	for (int i=3; i<=n; i+=2)
	{
		if (cv[i].k==1)
		{
			continue;
		}
		for (int j=i; j<=n; j+=i)
		{
			cv[j].nr++;
			cv[j].k=1;
		}
	}
	
	for (int l=n; l>=1; l--)
		if (cv[l].nr==k) return l;
	return 0;
}

int main()
{
	fscanf(f, "%d", &t);
	for (int i=1; i<=t; ++i)
	{
		int n, k;
		fscanf(f, "%d%d", &n, &k);
		fprintf(g, "%d\n", erathostenes(n, k));
	}
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}