题解 P2043 【质因子分解】
大魔鬼灿灿
·
·
题解
这道赤裸裸的数论,一个比较简单的办法,找质数加判断是不是整除i,直到该n!变成1
上思路
主要思路
1.筛素数,因为n的范围是10000,所以要筛到10000,这样就不怕 素数不够了
2.开始分解n!,不用把n的阶乘求出来,只需要一个循环,从2循 环到n,把每个数分解的变成1即可。
3.把所有质因数输出来就可以了
我的代码:
1.a数组存n!的质因数,pd数组判断质数
2.初始所有数都是质数,a数组清空,输入n
3.开始筛素数,循环只需从2循环到100就可以了
筛掉所有质数的倍数,剩下的就是合数
4.开始分解n!,i从2到n,b是当前的i
质因数分解b,直到b变成1
5.输出有质因数和个数就可以了
上代码
#include<cstdio>
#include<cstring>
#include<algorithm>
int n,a[10001];
bool pd[10001];
int main()
{
memset(pd,1,sizeof(pd));
memset(a,0,sizeof(a));
scanf("%d",&n);
for(int i=2;i<=100;i++)
if(pd[i])
for(int j=2;i*j<=10000;j++)
pd[i*j]=0;
for(int i=2;i<=n;i++)
{
int b=i;
for(int j=2;j<=n;j++)
if(pd[j])
while(b%j==0)
{
a[j]++;
b/=j;
}
}
for(int i=2;i<=n;i++)
if(a[i]!=0)
printf("%d %d\n",i,a[i]);
return 0;
}