关于c语言“将一个正整数分解成质因数的乘积”程序的问题

2024-11-22 01:54:50
推荐回答(3个)
回答1:

/*a=1表示重头开始扫描!!!,因为我要获得下一个素因子,所以要从a=2扫描,虽然写了a=1,可是a++以后就成2了*/
/*下面是我写的代码,LZ可以参考一下*/
#include"stdio.h"
int
s[10005]={1,1};/*素数表,=0表示是素数,=1表示为非素数*/
int
p[5002],plen
=
0
;
void
mklist()
{
int
i,j;
for(i=2;i*i<=10000;++i)
if(!s[i])
for(j=i;j*i<=10000;++j)
s[i*j]=1;
for(i=2;i<=10000;++i)
if(!s[i])
p[plen++]=i;/*添加到素数集*/
}
int
split(int
n,int
fac[][2])/*返回素因子种类数*/
{
int
len
=
0;
int
i;
for(i=0;i=p[i];++i)
if(n%p[i]==0)
{
fac[len][0]=p[i];/*[][0]保存该素因子*/
fac[len][1]=0;/*[][1]保存该素因子个数*/
while(n%p[i]==0)
n/=p[i],++fac[len][1];
++len;
}
if(n!=1)
{
fac[len][0]=n;
fac[len][1]=1;
++len;
}
return
len;
}
void
main()
{
int
fac[32][2],len,i,n;
mklist();
scanf("%d",&n);/*n<=10^8*/
len
=
split(n,fac);
for(i=0;iprintf("%d:%d\n",fac[i][0],fac[i][1]);
}

回答2:

如果去掉了就会把多个质数当成了一个
比如12
有这一句就输出 12=2*2*3
没有就输出 12=2*3
你可以自己试一下就明的了

回答3:

/*a=1表示重头开始扫描!!!,因为我要获得下一个素因子,所以要从a=2扫描,虽然写了a=1,可是a++以后就成2了*/

/*下面是我写的代码,LZ可以参考一下*/

#include"stdio.h"
int s[10005]={1,1};/*素数表,=0表示是素数,=1表示为非素数*/
int p[5002],plen = 0 ;
void mklist()
{
int i,j;
for(i=2;i*i<=10000;++i)
if(!s[i])
for(j=i;j*i<=10000;++j)
s[i*j]=1;
for(i=2;i<=10000;++i)
if(!s[i])
p[plen++]=i;/*添加到素数集*/
}
int split(int n,int fac[][2])/*返回素因子种类数*/
{
int len = 0;
int i;
for(i=0;i=p[i];++i)
if(n%p[i]==0)
{
fac[len][0]=p[i];/*[][0]保存该素因子*/
fac[len][1]=0;/*[][1]保存该素因子个数*/
while(n%p[i]==0)
n/=p[i],++fac[len][1];
++len;
}
if(n!=1)
{
fac[len][0]=n;
fac[len][1]=1;
++len;
}
return len;
}
void main()
{
int fac[32][2],len,i,n;
mklist();
scanf("%d",&n);/*n<=10^8*/
len = split(n,fac);
for(i=0;i printf("%d:%d\n",fac[i][0],fac[i][1]);
}