7-1 改错题
作业已超过截止时间,您无法递交本题目。
函数factor的功能是求出正整数m(m>2)除自身以外的所有不同因子,将这些因子按从小到大的顺序存放到fac指向的数组中,将因子个数保存到n指向的变量中,函数返回因子之和。
算法提示:用m分别除以2,3,4,…,(int)sqrt(m),若相除得到两个互异因子,则小者存入fac指向数组的左端,大者存入fac指向数组的右端;若相除得到两个相同因子,则将该因子存入fac指向数组的左端。当求出全部因子后,将所有因子按从小到大的顺序集中存放在fac指向数组的左端。
测试案例中,保证因子总数超过100。
【含有错误的源程序】
#include <stdio.h>
#include <math.h>
#define N 100
int factor(int m,int *fac,int *n)
{
int K=(int)sqrt(m);
int right,left, i;
int sum;
fac=1; *n=1;
left=1; right=N-1;
sum=1; i=2;
while(i<=K);
{
int k=m/i;
if(k*i==m)
{
if(i!=m)
{
*n+=2; sum=sum+i+k;
fac[left++]=i; fac[right--]=k;
}
else
{
*n+=1; sum+=i;
fac[left++]=i;
}
}
i++;
}
for(i=right+1; i<=N-1; i++)
fac[left]=fac[i];
return sum;
}
int main()
{
int fac[N]={0},i,m,num;
int sum;
scanf("%d", &m);
sum=factor(m,fac[], num);
printf("Sum:%d\n", sum);
printf("Numer:%d\n", num);
printf("Factors:", num);
for(i=0; i<num; i++)
printf("%6d",fac[i]);
return 0;
}
输入样例
输入:
m=32
输出:
Sum:31
Number:=5
Factors:1 2 4 8 16