Cod sursa(job #1714027)

Utilizator dragostanTantaru Dragos Constantin dragostan Data 7 iunie 2016 09:49:26
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int pas=1<<30,p,q;
int fact[1000000];
int putere(int,int);
int nr(int,int,int);
int main()
{
    int i=0,d=2,cop,m,fmax=-1;
    in >> p >> q;
    cop=p;
    for(;d*d<=cop;++d)
        while(cop%d==0)
        {
            cop/=d;
            fact[d]++;
            m=d;
        }
    if(cop>1)
    {
        fact[cop]++;
        m=cop;
    }
    cout << m << endl;
    for(i=2;i<=m;++i)
    {
        int j=0;
        if(fact[i])
        while(pas)
        {

            if(nr(j+pas,i,fact[i])<=q)
                j+=pas;
            cout << j << "\n";
            pas/=2;
        }
        if(j>fmax) fmax=j;
        cout << fmax << endl;
    }
    out << --fmax;
    return 0;
}
int nr(int n,int nr,int put)
{
    int div=0,aa;
    aa=putere(nr,put);
    while(n>=aa)
    {
        div+=n/aa;
        n/=aa;
        //cout << n << " " << aa << endl;
       // cout << n << " " << put << "\n";
    }
    return div;
}
int putere(int baza,int exponent)
{
    int nr=1;
    while(exponent)
    {
        nr*=baza;
        exponent--;
    }
    return nr;
}