题目:
给定整数 NN,试把阶乘 N!分解质因数,按照算术基本定理的形式输出分解结果中的 Pi和 Ci 即可。
输入样例:
5
输出样例:
2 3
3 1
5 1
样例解释
题目分析:
分为两个重要的步骤:
1.利用先找质数,再找素数的方法筛选出素数
2.对n!进行分解,找到质因数
我们来一个样例说明一下:
1 2 3 4 5 6 7 8 我们求得在8!中2的个数
1 1 1 1 首先我们先计算出2的倍数的个数:8/2=4
1 1 其次我们计算出4的倍数的个数: 8/4=2(上面一个式子求出了第一层,现在求第二层)
1 最后我们解出第三层的2的个数: 8/8=1
我们把4+2+1=7,所以一共7个2出现了。
代码如下
#include<stdio.h>
int notprime[1000000]={0};
int prime[1000000]={0};
int primecount=0;
int main()
{
int n;
scanf("%d",&n);
//筛除素数
for(int i=2;i<=n;i++)
{
if(notprime[i])continue;
for(int j=2;j<=n/i;j++)
{
notprime[i*j]=1;
}
}
for(int i=2;i<=n;i++)
{
if(!notprime[i])prime[++primecount]=i;
}
//找出质因数
for(int i=1;i<=primecount;i++)
{
int tempprime=prime[i],ans=0;
//要用long long 不然会超
for(long long k=tempprime;k<=n;k*=tempprime)
{
ans+=(n/k);
}
printf("%d %d\n",tempprime,ans);
}
}