Cod sursa(job #216704)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 25 octombrie 2008 12:00:41
Problema Zero 2 Scor 74
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#include<math.h>
long long i,n,b,j,p[100000],e[100000],lp;
long long m,q;
long long s(long long n,long long p)
{long long k;
 k=(n/p)-1;
 return ((k*(k+1))/2)*p+(k+1)*(n-(k+1)*p+1);
}
long long nr(long long n,long long p)
{long long ss,x;
 x=1;
 ss=0;
 while(x*p<=n){x*=p;ss+=s(n,x);}
 return ss;
}
int main()
{
 freopen("zero2.in","r",stdin);
 freopen("zero2.out","w",stdout);
 for(i=1;i<=10;++i)
    {
     scanf("%lld%lld",&n,&b);
     for(j=2;j<=sqrt(b);++j)
        if(b==1)break;
           else if(b%j==0){p[++lp]=j;e[lp]=0;while(b%j==0){b/=j;++e[lp];}}
     if(b>1)
       {p[++lp]=b;
        e[lp]=1;}
     m=2000000000;
     for(j=1;j<=lp;++j)
        {
         q=nr(n,p[j])/e[j];
         if(m>q)m=q;
        }
     printf("%lld\n",m);
     lp=0;
    }
 return 0;
}