Cod sursa(job #1938470)

Utilizator sefuvostruHoszu Adryel sefuvostru Data 24 martie 2017 20:27:16
Problema Divizori Primi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <climits>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("divprim.in");
ofstream g("divprim.out");
int detector(long long n )
{
    if(n==2||n==3)
    return 1;
    if((n&0x1)==0||n%3==0)
    return 0;
    long long sqr=sqrt((double)n)+1;
    for(int i=6;i<=sqr;i=i+6)
    {
        if(n%(i-1)==0||n%(i+1)==0)
        return 0;
    }
    return 1;
}
int t,i,j,x,vx,mmax,ok,nr1;
struct
{
	int k,nr;
} v[100001];
struct
{
	int uno,div;
} prim[1000000];
int main()
{
	mmax=INT_MIN;
    f>>t;
    for(i=1;i<=t;i++)
    {
    f>>v[i].nr>>v[i].k;
    if(v[i].nr>mmax)
    mmax=v[i].nr;
    }
    prim[1].uno=1;
    for(i=2;i*i<=mmax;i++)
    {
    	if(prim[i].uno==0)
    	for(j=2;j<=mmax/i;j++)
    	{
    		prim[i*j].uno=1;
    		prim[i*j].div++;
		    if(detector(j)==1&&j*j>mmax)
		    prim[i*j].div++;
    	}
    }
    for(i=1;i<=t;i++)
    {
    	vx=0;
    	for(x=v[i].nr;x>=1&&ok!=1;x--)
    	{
    	if(prim[x].div==v[i].k)
    	{
    		ok=1;
    		vx=x;
    	}
        }
        ok=0;
        g<<vx<<"\n"; 
    }
    
    return 0;
}