c程序 输入一个正整数,将它分解为质因数的乘积的形式输出,(例如输入:90 ,打印:90=2*3*3*5 )

2024-11-21 07:32:02
推荐回答(3个)
回答1:

wchknudt的程序有问题。在判断某个质数能否被n整除时,忘记每次找到一个质因数后,应该将n除以该质因数。这样,n始终保持初始值,永远能被第一个质因数整除,循环无法停止。应该设一个辅助变量,初始值为n,循环中对该辅助变量进行操作即可。

#include
#include
#include

int flist[10000];
int factor[10000];
int cnt = 0;
//用最简单的方法,不用筛法了
int isPrime(int n)
{
int i;
for (i = 2; i <= sqrt(n*1.0); i++)
if (n % i == 0 )
return 0;
return 1;
}

int main()
{
int n,s;
scanf("%d", &n);
s=n;

memset(flist, 0, sizeof(int));
int i = 0;
for (i = 2; i <= sqrt(n*1.0); i++)
{
if ( s % i == 0)
{
if (isPrime(i) )
{
while (s % i == 0 )
{
flist[cnt]++;
factor[cnt] = i;
s/=i;
}
cnt++;
}
}
}

printf("%d=", n);
for(i = 0; i {
int j;
for (j = 0; j < flist[i]; j++)
{
printf("%d", factor[i]);
if ( i == cnt-1 && j == flist[i] -1)
printf("\n");
else
printf("*");
}
}
}

回答2:

#include
#include
#include

int flist[10000];
int factor[10000];
int cnt = 0;
//用最简单的方法,不用筛法了
int isPrime(int n)
{
int i;
for (i = 2; i <= sqrt(n*1.0); i++)
if (n % i == 0 )
return 0;
return 1;
}

int main()
{
int n;
scanf("%d", &n);

memset(flist, 0, sizeof(int));
int i = 0;
for (i = 2; i <= sqrt(n*1.0); i++)
{
if ( n % i == 0)
{
if (isPrime(i) )
{
while (n % i == 0 )
{
flist[cnt]++;
factor[cnt] = i;
}
cnt++;
}
}
}

printf("%d=", n);
for(i = 0; i {
int j;
for (j = 0; j < flist[i]; j++)
{
printf("%d", factor[i]);
if ( i == cnt-1 && j == flist[i] -1)
printf("\n");
else
printf("*");
}
}
}

回答3:

main()
{
int a,b,c,s;
a=2;
b=3;
c=5;
s=a*b*b*c;
printf("s=%d\n",s);
getch();
}