Cod sursa(job #1988547)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 3 iunie 2017 13:18:17
Problema Zero 2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<fstream>
using namespace std;
ifstream f("zero2.in");
ofstream g("zero2.out");
int N,B,Bputere[100001],Numere[100001],nr;
bool prim(int o){
    if(o<2)return false;
    for(int d=2;d*d<=o;++d)
        if(!(o%d))
            return false;
    return true;
}
void descompNum(int y[],int U,int &mAx){
        int f=2,x=U;
        while(f*f<=x){
            if(!(U%f)){
                mAx=max(mAx,f);
                while(!(U%f))U/=f,++y[f];
            }
            if(f==2)++f;
            else f+=2;
        }
        if(U>1)++y[U],mAx=U;
}
int main()
{
    while(f>>N>>B){
        if(B==10){
            nr=0; int p=5;
            while(N/p)nr+=(N/p),p*=p;
            g<<nr<<"\n";
        }else{
            int MaxB=0,MaxN=0;
            if(prim(B))++Bputere[B],MaxB=max(MaxB,B);
            else descompNum(Bputere,B,MaxB);
            for(int i=2;i<=N;++i)
                for(int j=2;j<=i;++j)
                    if(prim(j))++Numere[j],MaxN=max(MaxN,j);
                    else descompNum(Numere,j,MaxN);
            nr=999999999;
            for(int i=2;i<=MaxB;++i)
                if(Bputere[i])nr=min(nr,Numere[i]/Bputere[i]),Bputere[i]=0;
            for(int i=2;i<=MaxN;++i)Numere[i]=0;
            g<<nr<<"\n";
        }
    }
    return 0;
}