有关素数的问题?
任何大于2的正整数都可以分解成几个素数的乘积,且这个分解是唯一的。例:输入30,输出30=2*3*5
而且素数可以重复,比如:12=2*2*3
下面这个函数能够输出像30这样的分解因数是不同的素数的数,而不能输出有多个素数的乘积的数,比如12=2*2*3,8=2*2*2,不知我是否说明白了!请高手帮我看看!谢谢!
#include<stdio.h>
#include<math.h>
int isprime(int n);/*判断素数的函数*/
int fenjie(int n);/*将大于2的正整数分解的函数*/
void main()
{
int i,n;
scanf("%d",&n);fflush(stdin);
if(n<=1) EOF;
if (isprime(n)!=0)
printf("%d=1*%d\n",n,n);
else fenjie(n);
}
int isprime(int n)
{
int j,limit;
if(n<=1) return 0;
if(n==2) return (n);
if(n%2==0) return 0;
limit=sqrt(n)+1;
for(j=3;j<=limit;j+=2)
if(n%j==0) return 0;
return (n);
}
int fenjie(int n)
{ int i,k;
k=sqrt(n)+1;
for(i=2;i<=k;i++)
if(isprime(i)!=0&&n%i==0)
{
n/=i;
printf("i=%d\n",i);}
if(n<i&&n%i==0)/*想从这里从新调用分解函数,关键是这里不能完成输出有重复素数乘积的数*/
fenjie(n);
}