1. 程式人生 > 其它 >0056 如果一個數等於它的因子之和,則稱該數為“完全數”。例如,6的因子為1、2、3,而 6=1+2+3,因此6是“完全數”。同時完全數也滿足\left ( 2^{p}-1 \right )2^{\left p-1 \right }這一公式,例如6的p=2

0056 如果一個數等於它的因子之和,則稱該數為“完全數”。例如,6的因子為1、2、3,而 6=1+2+3,因此6是“完全數”。同時完全數也滿足\left ( 2^{p}-1 \right )2^{\left p-1 \right }這一公式,例如6的p=2

問題描述:

  如果一個數等於它的因子之和,則稱該數為“完全數”。例如,6的因子為1、2、3,而 6=1+2+3,因此6是“完全數”。同時完全數也滿 (2p-1)*2p-1這一公式,例如6的p=2。

  請在第一行輸出10000內的完全數,之後的行輸出每個完全數對應的p,如:6 2

程式碼展示:

 1 #include<stdio.h>
 2 #include<math.h>
 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<len; i++){ 13 printf("%d ", n[i][0]); 14 } 15 printf("\n每個完全數和對應的p值為:\n"); 16 for(i=0; i<len; 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<i; 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<len; i++){ 42 for(j=1; j<n[i][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 }

執行截圖: