#include <stdio.h>
#include <math.h>
#define PI 3.14159265
#define E 2.718281828459
int numofdigit(int n, int b)
{
double t;
int i;
t = 0.0;
for(i = 2; i <= n; i++){
t += log10(i)/log10(b);
}
t += 1E-10;
printf("%lf\n", t);
return (int)t+1;
}
int numofzero(int n, int b, int prime[])
{
int i, j, t, m, k, min, a[200], p[200], d[200];
t = b;
for(i = 0; i < 200; i++){
a[i] = 0;
d[i] = 0;
}
for(i = 0; i < 200 && t > 1; i++){
while(t % prime[i] == 0){
a[i]++;
t /= prime[i];
}
}
k = 0;
m = 0;
for(j = 0; j < i; j++){
if(a[j] != 0){
p[k++] = prime[j];
a[m++] = a[j];
}
}
for(i = 2; i <= n; i++){
t = i;
for(j = 0; j < m && t > 1; j++){
while(t % p[j] == 0){
d[j]++;
t /= p[j];
}
}
}
min = d[0]/a[0];
for(i = 1; i < m; i++){
t = d[i]/a[i];
if(min > t)
min = t;
}
return min;
}
int main()
{
int i, j;
int n, b;
int prime[1000];
for(i = 0; i < 1000; i++)
prime[i] = 0;
for(i = 2; i*i < 1000; i++){
if(prime[i] == 0){
for(j = i*i; j < 1000; j+= i)
prime[j] = 1;
}
}
j = 0;
for(i = 2; i < 1000; i++){
if(prime[i] == 0)
prime[j++] = i;
}
while(scanf("%d %d", &n, &b) != EOF){
printf("%d %d\n", numofzero(n, b, prime), numofdigit(n, b));
}
return 0;
}
本文提供了一段C语言程序代码,该程序用于计算n的阶乘在b进制下所占的位数以及阶乘结果末尾零的数量。通过使用数学函数和迭代方法,程序实现了对指定数值阶乘特性的高效计算。
7883

被折叠的 条评论
为什么被折叠?



