Cod sursa(job #2067543)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 16 noiembrie 2017 16:28:26
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include<cstdio>
#include <utility>
using namespace std;
int p,q,fina;
pair <int,int> divizori[100];
long long mihai_indreias_e_un_copiator(long long n,long long d){
  long long rasp=0;
  while(d<=n){
    rasp+=1LL*(n/=d);
  }
  return rasp;
}
bool misu_copiaza(long long n){
  long long i;
  for(i=1;i<=fina;i++){
    if(mihai_indreias_e_un_copiator(n,divizori[i].first)<divizori[i].second)
      return false;
  }
  return true;
}

long long misu_nu_mai_copia(){
  long long  p2=1LL<<60;
  long long pas=0;
  while(p2>0){
    if(misu_copiaza(pas+p2)==false)
      pas+=1LL*p2;
    p2/=2;
  }
  return pas+1;
}
int main()
{
    FILE*fin,*fout;
    fin=fopen("gfact.in","r");
    fout=fopen("gfact.out","w");
    fscanf(fin,"%d%d",&p,&q);
    long long d=2,i=0;
    while(d*d<=p){
      if(p%d==0){
        divizori[++i].first=d;
      }
      while(p%d==0){
        p/=d;
        divizori[i].second++;
      }
      divizori[i].second*=q;
      d++;
    }
    if(p>1){
      divizori[++i].first=p;
      divizori[i].second=q;
    }
    fina=i;
    fprintf(fout,"%lld",misu_nu_mai_copia());
    return 0;
}