Cod sursa(job #235974)

Utilizator BlackjackmdsSpataru Madalin Daniel Blackjackmds Data 26 decembrie 2008 13:52:41
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <math.h>
#include <string.h>
#define NMAX 1000003
FILE *f,*g;


void gen_prime(char prim[], long long int n)
{
long long int i,j;
for(i=4;i<NMAX;i=i+2) prim[i]=1;
for(i=3;i<=1000;i=i+2)
	if(prim[i]==0) for(j=i*i;j<=n;j=j+i) prim[j]=1;
}

void descomp(char g[],long long n)
{long long int i;
if(n%2==0)    {g[2]=2;   while(n%2==0) n=n/2;}
for(i=3;i<=n/2;i=i+2)
	if(g[i]==0) if(n%i==0) {g[i]=2;
				   while(n%i==0) n=n/i;
			       }
}
void mark(char g[])
{long long int i,j;
if(g[2]==2) for(i=4;i<NMAX;i=i+2) g[i]=2;
for(i=3;i<=1000;i=i+2) if(g[i]==2) for(j=2*i;j<=NMAX;j=j+i) g[j]=2;
}




int main()
{long long int n,p,i ;
char m[NMAX];
memset(m,0,sizeof(m));
f=fopen("frac.in","r");
g=fopen("frac.out","w");
fscanf(f,"%lld %lld",&n,&p);
gen_prime(m,NMAX);
descomp(m,n);
mark(m);
i=1;
while(p!=0)
   if(m[i]!=2) {p--;i++;}
      else   i++;
fprintf(g,"%lld",i);
fclose(f);
fclose(g);
return 0;
}