c语言输入任意一个数,求小于其的整数中的完数
数组存储法:复杂度较高,数组初始化((n+1)的平方),因子求出后赋值给数组(n的平方),打印完数的值和因子(完数)
输入的数是100,计算了12653次
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int i,j;
int a[n+1][n+1]={0};
for(i=0;i<=n;i++){
for(j=0;j<=n;j++){
a[i][j]=0;
printf("a[%2d][%2d]=%2d ",i,j,a[i][j]);
}
printf("\n");
}
for(i=1;i<n;i++){
int b=sizeof(0)*n*j;
// printf(" %6d ",b);
int sum=0;
for(j=1;j<i/2+1;j++)
{
if(i%j==0){
a[i][j]=j;
sum+=j;
// printf("a[%2d][%2d]=%2d ",i,j,a[i][j]);
}
}
// printf("\n");
if(sum==i){
printf("%6d ",i);
for(int j=1;j<=sum;j++){
if(a[i][j]!=0)
printf("%2d ",a[i][j]);
}
printf("\n");
}
}
return 0;
}
边找边输出,不存储:复杂度较低,输入的数是100,计算了4853次
int main()
{
int i,j,k;
for(i=1;i<10000;i++)
{
int sum=0;
for(j=1;j<i;j++)
{
if(i%j==0){
sum+=j;
}
}
if(sum==i){
printf("%d its factors are ",i );
for(k=1;k<i;k++)
{
if(i%k==0){
printf("%d ",k);}
}
printf("\n");
}
}
return 0;
}