Cod sursa(job #2067524)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 16 noiembrie 2017 16:08:57
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include<cstdio>
using namespace std;
int p,q;
pair <int,int> div[100];
int legendre(long long n,long long d){
  int rasp=0;
  while(d<=n){
    rasp+=(n/=d);
  }
  return rasp;
}
bool ver(long long n){
  long long d;
  d=2;
  int ind=0;
  while(d*d<=p){
    ind=0;
    while(p>1 && p%d==0){
      p/=d;
      ind++;
    }
    if(legendre(n,d)<ind*q)
      return false;
  }
  if(p>1)
    if(legendre(n,p)<q)
      return false;
  return true;
}

long long cautbin(){
  int p2=1<<30;
  long long pas=0;
  while(p2>0){
    if(ver(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=1,i=0;
    int ind;
    while(d*d<=p){
      ind=0;
      while(p%d==0){
        p/=d;
        ind++;
      }
      div[i].first=d;
      div[i].second=p*q;
      i++;
    }
    if(p>1){
      div[i].first=p;
      div[i++].second=1;
    }*/
    fprintf(fout,"%lld",cautbin());
    return 0;
}