-
描述
-
给定两个数m,n,其中m是一个素数。
将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。
-
输入
-
第一行是一个整数s(0<s<=100),表示测试数据的组数
随后的s行, 每行有两个整数n,m。
输出
- 输出m的个数。 样例输入
-
2 100 5 16 2
样例输出
-
24 15
-
第一行是一个整数s(0<s<=100),表示测试数据的组数
/*暴力因式分解*/
#include<cstdio>
#include<cstring>
#define N 10000
int cnt[N];
bool prime[N];
void Prim()
{
memset(prime,false,sizeof(prime));
prime[1] = true;
int i,j;
for(i=2;i<N;i++)
{
if (!prime[i])
for(j=i*i;j<N;j+=i)
prime[j] = true;
}
}
int main()
{
int t,n,m,i,j,k;
Prim();
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
k = j =2;
memset(cnt,0,sizeof(cnt));
while(k<=n)//分解阶乘n!,逐次分解每个数
{
j = k;
i = 2;
while(j!=1) //j==1表示分解完毕
{
while(j%i==0)
{
j=j/i;
cnt[i]++;
}
for(i++;i<N;i++) //计算出下一个素数
if (!prime[i])break;
}
k++;
}
printf("%d\n",cnt[m]);
}
}