0056 如果一个数等于它的因子之和,则称该数为“完全数”。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完全数”。同时完全数也满足 (2p-1)*2p-1这一公式,例如6的p=2
问题描述:
如果一个数等于它的因子之和,则称该数为“完全数”。例如,6的因子为1、2、3,而 6=1+2+3,因此6是“完全数”。同时完全数也满 (2p-1)*2p-1这一公式,例如6的p=2。
请在第一行输出10000内的完全数,之后的行输出每个完全数对应的p,如:6 2
代码展示:
1 #include2 #include 3 int fun1(int n[100][2]); 4 void fun2(int n[100][2], int len); 5 int main(){ 6 int n[100][2]; //用于存储完全数及p 7 int i; //循环变量 8 int len; //完全数的个数 9 len = fun1(n); //求完全数 10 fun2(n,len); //求完全数的p值 11 printf("完全数有:"); 12 for(i=0; i ){ 13 printf("%d ", n[i][0]); 14 } 15 printf("\n每个完全数和对应的p值为:\n"); 16 for(i=0; i ){ 17 printf("%d %d\n",n[i][0],n[i][1]); 18 } 19 return 0; 20 } 21 int fun1(int n[100][2]){ 22 int i,j; 23 int len=0; 24 int sum; 25 for(i=3;i<10000;i++){ //寻找完全数 26 sum = 0; 27 for(j=1; j){ 28 if((i%j)== 0){ 29 sum = sum + j; 30 } 31 } 32 if(sum == i){ 33 n[len][0] = i; 34 len++; 35 } 36 } 37 return len; 38 } 39 void fun2(int n[100][2], int len){ //求p值 40 int i,j,temp; 41 for(i=0; i ){ 42 for(j=1; j 0]; j++){ 43 temp = (pow(2,j)-1)*(pow(2,j-1)); 44 if(temp == n[i][0]){ 45 n[i][1] = j; 46 break; 47 } 48 } 49 } 50 }
运行截图: