I read the above posts and tested all the inputs and also changed some modifications suggested in prior posts. The outputs seem to agree on the answers provided but the same wrong answer.
Code: Select all
#include <stdio.h>
#include <math.h>
#define MAX_LONG 2147483647
int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547,
557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797};
int maxPower(int n, int p)
{
int power = p;
int mp = 0;
int tn = n;
while (tn % power == 0)
{
mp++;
power *= p;
}
return mp;
}
unsigned long maxFactorialPower(unsigned long n, int p)
{
unsigned long power = p;
unsigned long sum = 0;
while (n >= power)
{
sum += n/power;
power *= p;
}
return sum;
}
int main()
{
unsigned long n;
int b,i, mp;
double pi=2*acos(double(0.0));
double e=exp(double(1.0));
unsigned long mfp;
while (scanf("%lu %d",&n,&b) != EOF)
{
unsigned long nDigit, nZero = MAX_LONG;
for (i = 0;i < 139;i++)
{
if (b < primes[i])
break;
if (b % primes[i] == 0)
{
mp = maxPower(b,primes[i]);
mfp = maxFactorialPower(n,primes[i]);
unsigned long tnd = mfp/mp;
if (tnd < nZero)
nZero = tnd;
}
}
double num = 0;
/*for (i = 1;i <= n;i++)
{
num += log(i);
}
double denom = log(b);*/
if (n == 0 || n == 1)
{
printf("0 1\n");
}
else {
nDigit = floor((log(2*pi*n)/2+n*log(n/e))/log(double(b))+0.000001)+1;
printf("%lu %lu\n",nZero,nDigit);
}
}
return 0;
}
Some suggestion please.