Pagini recente » Cod sursa (job #2556627) | Cod sursa (job #2595519) | Cod sursa (job #2075293) | Cod sursa (job #96017) | Cod sursa (job #1810763)
#include <stdio.h>
#include <stdlib.h>
#define Pr 4675
int p[Pr];
char c[45000];
int fact[Pr+1][2];
void prime()
{
int i,k=0;
for(i=2;i<45000;i++)
if(c[i]==0){
p[k]=i;
k++;
}
}
void ciur()
{
int i,d,s=0;
for(i=2; i*i<45000; i++)
if(c[i]==0){
for(d=i*i; d<45000; d+=i)
c[d]=1;
}
prime();
}
unsigned long long int nr(unsigned long long int n,int q)
{
unsigned long long int s=0;
while(n>0)
{
n=n/q;
s+=n;
}
return s;
}
char verif(unsigned long long int n,int q)
{
int i=1,x=1;
while(i<=q && x==1)
{
if(nr(n,fact[i][0])<fact[i][1])
x=0;
i++;
}
return x;
}
int main()
{
int n,k,d,q;
unsigned long long int step=1,r;
FILE*fi,*fo;
fi=fopen("gfact.in","r");
fo=fopen("gfact.out","w");
fscanf(fi,"%d%d",&n,&k);
ciur();
d=0;
q=0;
while(n>1){
if(n%p[d]==0)
{
if(fact[q][0]!=p[d]){
fact[q][1]*=k;
q++;
}
n=n/p[d];
fact[q][0]=p[d];
fact[q][1]++;
}
else {
d++;
}
}
fact[q][1]*=k;
step=step<<63;
r=0;
while(step>0)
{
if(verif(r+step,q)==0)
r+=step;
step/=2;
}
fprintf(fo,"%d",r+1);
fclose(fi);
fclose(fo);
return 0;
}