c程序问题,初学指教,输出质因子(能整除K的所有数中的质数)

来源:百度知道 编辑:UC知道 时间:2024/06/19 10:00:22
#include<stdio.h>
void fun(int k,int *p)
{
int i,j;
for(i=1;i<=k;i++)
{
if(k%i==0)

for(j=2;j<i;j++)
{ if(i%j==0)
break;
if(j>=i)
{
*p=i;
p++;
}
}

}
*p=-1;
}
void main()
{
int x,a[17]={0},i;
scanf("%d",&x);
fun(x,a);
for(i=0;a[i]!=-1;i++)
printf("%d",a[i]);
printf(" ");
printf("\n");
}
运行得不到结果,怎么回事?

for(j=2;j<i;j++)
{ if(i%j==0)
break;
if(j>=i)
{
*p=i;
p++;
}
}
上面的括号写错了,根本就不用最外层的花括号:
for(j=2;j<i;j++)
if(i%j==0)
break;
if(j>=i)
{
*p=i;
p++;
}
因为for循环是看有没有能整除i的j,如果有,就退出循环.而后面的if就是看循环里的整除条件是否能满足,如果一次都不满足,那么j==i了

另外最上面的for循环中for(i=1;i<=k;i++) i不要取1,直接从2开始,因为1不是质数

楼主程序有很多地方考虑的不周到
你一来就用的数组限制了只能有17个因子,但是不只咋办?还有你括号很混乱,不知道你有没有考虑1,2;我稍微改了一下,找一个输一个,你看下嘛,编译通过,结果正确#include<stdio.h>
void fun(int k)
{
int i,j,flag;
for(i=1;i<=k;i++)
{
flag=0;
if(k%i==0)
{
for(j=2;j<i;j++)
{ if(i%j==0)
{flag=1;
break;
}
}

if(flag==0)
{
printf("\n%d",i);

}
}
}
}
void main()
{
int x;
scanf("%d",&x);
fun(x);
}