主题:急!!!!帮忙解释一下~~
帮忙解释一下这个代码的意思
小弟跪谢了
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a[30], b[30], count, c=0, n, k, m, i, j, s=0, min;
scanf("%d", &count);
while (++c<=count)
{
scanf("%d%d", &k, &n);
if ((m=k)&1) j=0;
else
{
j=*b=1;
while (!((m>>=1)&1)) ++*b;
*a=2;
}
for (i=3; m>1; i+=2)
{
if (m%i==0)
{
b[j]=1;
while ((m/=i)%i==0) b[j]++;
a[j++]=i;
}
}
min=INT_MAX;
while (j)
{
for (s=0, i=a[--j]; i<=n; s+=n/i, i*=a[j]);
if ((a[j]=s/b[j])<min) min=a[j];
}
printf("Scenario #%d:%d\n", c,min);
}
return 0;
}
小弟跪谢了
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a[30], b[30], count, c=0, n, k, m, i, j, s=0, min;
scanf("%d", &count);
while (++c<=count)
{
scanf("%d%d", &k, &n);
if ((m=k)&1) j=0;
else
{
j=*b=1;
while (!((m>>=1)&1)) ++*b;
*a=2;
}
for (i=3; m>1; i+=2)
{
if (m%i==0)
{
b[j]=1;
while ((m/=i)%i==0) b[j]++;
a[j++]=i;
}
}
min=INT_MAX;
while (j)
{
for (s=0, i=a[--j]; i<=n; s+=n/i, i*=a[j]);
if ((a[j]=s/b[j])<min) min=a[j];
}
printf("Scenario #%d:%d\n", c,min);
}
return 0;
}