使用函数输出指定范围内的完数:输入两个正整数m和n(1≤m,n≤1 000),输出m~n之间的所有完数,完数就是因子和它本身相等的数。要求定义并调用函数factorsum(number),它的功能是返回number的因子和。例如,factorsum(12)的返回值是16(1+2+3+4+6)。试编写相应程序。
int factorsum(int number){ int i,sum; sum=0; for(i=1;i<=number/2;i++){ if(number%i==0) sum+=i; } return sum; } void PrintPN(int m,int n){ int i,j,count; count=0; for(i=m;i<=n;i++){ if(factorsum(i)==i){ printf("%d = 1",i); for (j=2;j<=i/2;j++){ if(i%j==0) printf(" + %d",j); } printf("\n"); count++; } } if(count==0) printf("No perfect number"); }
#include<stdio.h> int factorsum(int number); int main(){ int m,n,i,cnt=0; printf("input m and n: "); scanf("%d %d",&m,&n); if(m>=1 && n<=1000){ for(i=m;i<=n;i++){ //m~n之间寻找 if(factorsum(i)==i){ //因子和与本身相等,即完数 printf("%6d",i); cnt++; if(cnt%10 == 0) //每行显示10个 printf("\n"); } } }else{ printf("invalid value"); } return 0; } //返回number 的因子和 int factorsum(int number){ int sum=0,i,temp; temp = number>>1; // 显然num的因子不超过number的1/2;故寻找number的因子时只找 1 ~ 0.5*number即可 for(i=1;i<=temp;i++){ if(number%i == 0){ sum += i; //因子和 } } return sum; }
#include<stdio.h>
int factorsum(int number)
{
int i,sum=0;
for (i = 1; i < number; i++)
if (number%i == 0)
sum += i;
return sum;
}
int main(void)
{
int m,n,j,s;
printf("please input m,n:");
scanf("%d,%d", &m,&n);
for(j=m;j<=n;j++)
{
s = j;
if (factorsum(s) == s)
printf("%d is 完数",s);
}
return 0;
}