大因数分解
#include<stdio.h>
#define LL long long
int isp[1000010];
LL prime[80000],ptp;
int f(LL x,int l){
// printf("%lld %d\n",x,l);
if(x==1)return 0;
int i;
for(i=l;i<=ptp;i++)if(x%prime[i]==0){
printf(" %d\n",prime[i]);
return 1+f(x/prime[i],i);
}
printf(" %lld\n",x);
return 1;
}
int main(){
LL i,j;
for(i=1;i<=1000000;i++)isp[i]=1;
for(i=2;i<=500000;i++){
for(j=2;i*j<=1000000;j++)isp[i*j]=0;
}
ptp=0;
for(i=2;i<=1000000;i++)if(isp[i])prime[++ptp]=i;
LL n;
// printf("%lld!\n",ptp);
while(scanf("%lld",&n)!=EOF&&n>=0){
f(n,1);
printf("\n");
}
return 0;
}
1000000内大约有8w个质数=.=
打个表模拟过
1PE没有前导空格
2WA把x==1注释掉就挂了
3Y
本文介绍了一个大因数分解的C语言实现,利用筛法预处理得到一定范围内的所有质数,并通过递归的方式输出给定数值的所有质因数。文章包含完整的源代码及调试过程。
907

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



