Cod sursa(job #1471331)

Utilizator ArchazeyBaltatu Andrei-Mircea Archazey Data 13 august 2015 16:55:08
Problema GFact Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("gfact.in");
ofstream fout("gfact.out");

const int NMAX=50005;

int p,q,primes[NMAX],fact[NMAX],expo[NMAX];
bitset<NMAX>viz;
int sol;

inline void Ciur()
{
    int i;
    long long j;
    primes[++primes[0]]=2;
    for (i=3;i<NMAX;i+=2)
        if (!viz[i])
            {
                primes[++primes[0]]=i;
                for (j=1LL*i*i;j<NMAX;j+=i) viz[j]=1;
            }
}

int main()
{
    int i,j,sq,cnt,aux,baux,kkt;
    fin>>p>>q;
    Ciur();sq=sqrt(p);
    //descomp
    for (i=1;i<=primes[0] && p>1 && primes[i]<=sq;i++)
        {
            cnt=0;
            while (p%primes[i]==0) cnt++;
            if (cnt>0)
                {
                    fact[++fact[0]]=primes[i];
                    expo[++expo[0]]=cnt;
                }
        }
    if (p>1)
        {
            fact[++fact[0]]=p;
            expo[++expo[0]]=1;
        }
    for (i=1;i<=fact[0];i++)
        {
            aux=q*expo[i];baux=fact[i];
            cnt=0;
            for (j=1;cnt<aux;j++)
                {
                    kkt=j;cnt++;
                    while (kkt%baux==0)
                        {
                            kkt/=baux;
                            cnt++;
                        }
                }
            j--;
            sol=max(sol,fact[i]*j);
        }
    fout<<sol<<"\n";
    return 0;
}