关于质因数分解的问题,大家能帮我看一下哪里出了问题吗
题目是这样的
#include<stdio.h>
#include<math.h>
int isprime(int n);
int main(void)
{
int n,i,j,k,s,b,answer;
int m[1000];
int h[100000]={0};
scanf("%d",&n);
printf("%d=",n);
answer=isprime(n);
i=n;
if(answer==1)
printf("%d",n);
else
{
for(k=0,j=0;k<=sqrt(i);k++)
{
if(n%k==0)
{
m[j]=k;
j++;
}
else continue;
}
s=strlen(m);
for(i=0;i<s;i++)
h[m[i]]++;
j=0;
k=1;
for(i=0;i<=10000;i++)
{
if(h[i]!=0)
{
j++;
if(h[i]>=2)
printf("%d^%d",i,h[i]) ;
else
printf("%d",i);
if(++k<j)
printf("*");
}
else continue;
}
}
return 0;
}
int isprime(int n)
{
int i;
for(i=2;i<=(n-1);i++)
{
if(n%i==0)
break;
else continue;
}
if(i=n-1)
return 1;
else return 0;
}
写得一般,仅供参考!
#include<stdio.h>
#include<math.h>
int isprime(int n);
int main(void)
{
int n;
scanf("%d", &n);
printf("%d=", n);
if (isprime(n) || n < 2)
{
printf("%d", n);
return 0;
}
int arr[n];
// 初始化数组
for (int i = 0; i < n; i++)
arr[i] = 0;
// 统计
int m = n;
for (int i = 2; i < n; i++)
{
while (m % i == 0 && isprime(i))
{
arr[i] += 1;
m /= i;
if (isprime(m))
{
arr[m] += 1;
goto label;
}
}
}
// 输出
label:
for (int i = 0; i < n; i++)
{
if (arr[i] == 1)
{
if (i == m)
printf("%d", i);
else
printf("%d*", i);
}
else if (arr[i] > 1)
{
if (i == m)
printf("%d^%d", i, arr[i]);
else
printf("%d^%d*", i, arr[i]);
}
}
return 0;
}
int isprime(int n)
{
int i;
for (i = 2; i <= n / 2; i++)
{
if (n % i == 0)
return 0;
}
return 1;
}
明显的错误是
if(i=n-1)
->
if(i==n-1)
如果还有别的错也不奇怪,你缩进都是乱的