找出n之內的完全數, 並輸出其因子


定義:

完全數:所有的真因子(即除了自身以外的約數)的和,恰好等於它本身。例如:第一個完全數是6,它有約數1、2、3、6,除去它本身6外,其余3個數相加,1+2+3=6。第二個完全數是28,它有約數1、2、4、7、14、28,除去它本身28外約數相加=28。

性質:

(1)所有的完全數都是三角數。例如:6=1+2+3;28=1+2+3+...+6+7;496=1+2+3+...+30+31;8128=1+2+3…+126+127。
(2)所有的完全數的倒數都是調和數。例如:1/1+1/2+1/3+1/6=2;1/1+1/2+1/4+1/7+1/14+1/28=2;1/1+1/2+1/4+1/8+1/16+1/31+1/62+1/124+1/248+1/496=2。
(3)可以表示成連續奇立方數之和。除6以外的完全數,都可以表示成連續奇立方數之和,並規律式增加。例如:28=1³+3^3;496=1^3+3^3+5^3+7^3;8128=1^3+3^3+5^3+……+15^3;33550336=1^3+3^3+5^3+……+125^3+127^3。
(4)都可以表達為2的一些連續正整數次冪之和。不但如此,而且它們的數量為連續質數。例如:6=2^1+2^2;28=2^2+2^3+2^4;496=2^4+2^5+2^6+2^7+2^8;8128=2^6+2^7+2^8+2^9+2^10+2^11+2^12;33550336=2^12+2^13+……+2^24。
(5)完全數都是以6或8結尾。如果以8結尾,那么就肯定是以28結尾。(科學家仍未發現由其他數字結尾的完全數。)
(6)各位數字輾轉式相加個位數是1。除6以外的完全數,把它的各位數字相加,直到變成個位數,那么這個個位數一定是1。例如:28:2+8=10,1+0=1;496:4+9+6=19,1+9=10,1+0=1;8128:8+1+2+8=19,1+9=10,1+0=1;33550336:3+3+5+5+0+3+6=28,2+8=10,1+0=1。
(7)它們被3除余1、被9除余1、1/2被27除余1。除6以外的完全數,它們被3除余1,9除余1,還有1/2被27除余1。28/3 商9余1,28/9 商3余1,28/27 商1余1。496/3 商165余1,496/9 商55余1。8128/3 商2709余1,8128/9 商903余1,8128/27 商301余1。
推導公式:
歐拉曾推算出完全數的獲得公式:如果p是 質數,且2^p-1也是質數,那么(2^p-1)X2^(p-1)便是一個完全數。
例如p=2,是一個質數,2^p-1=3也是質數,(2^p-1)X2^(p-1)=3X2=6,是完全數。
例如p=3,是一個質數,2^p-1=7也是質數,(2^p-1)X2^(p-1)=7X4=28,是完全數。
例如p=5,是一個質數,2^p-1=31也是質數,(2^p-1)X2^(p-1)=31X16=496是完全數。
但是2^p-1什么條件下才是質數呢?事實上,當2^p-1是質數的時候,稱其為 梅森素數。到2013年2月6日為止,人類只發現了48個梅森素數,較小的有3、7、31、127等。
 
https://baike.baidu.com/item/%E5%AE%8C%E5%85%A8%E6%95%B0
#include <stdio.h>

#define N 100

int main(){
    int i,j,k,n,sum,cnt;
    int a[N];
    sum=cnt=0;
    
    scanf("%d",&n);
    
    for(i=2;i<n;i+=2){
        if(i%10==6||i%100==28){
            for(j=1;j<=i/2;j++){
                if(i%j==0){
                    sum+=j;
                    a[cnt++]=j;
                    if(sum>i){
                        break;
                    }
                }
            }
            if(sum==i){
                printf("%d its factors are ",i);
                for(k=0;k<cnt;k++){
                    printf("%d ",a[k]);
                }
                printf("\n");
            }
            sum=0;
            cnt=0;
        }
    }
    return 0;
}

 

程序思路:對N以內的每個數,依次求余,所得因子計數並存入數組,輸出。
注意:
1.根據5條可簡化完全數判斷規則,就目前而言假設完全數的結尾必是6,或28
2.設定計數器cnt來計數因子數
3.因子數小於等於該數的1/2才繼續
4.sum大於該數可跳出當前循環
5.每次循環末尾 重置sum和cnt為0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 一個數如果恰好等於不包含它本身所有因子之和,這個數就稱為"完數"。 例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數"。 編程序找出N之內的所有完數,並按下面格式輸出其因子 編程序找出1000之內的所有完數,並按下面格式輸出其因子 一個數如果恰好等於它的因子之和,這個數就稱為完數。例如,6的因子為1,2,3,而6=1+2+3,因此6是完數。編程序找出1000之內的所有完數,並按下面格式輸出其因子: 一個數如果恰好等於它的因子之和,這個數就稱為“完數”例如,6的因子為1,2,3,而6=1+2+3,因此6是“完數”。編程序找出1000之內的所有完數,並按下面格式輸出其因子: 一個數如果恰好等於它的因子之和,這個數就稱為“完數”。例如,6的因子為1,2,3,而6=1+2+3,因此6是“完數”。編程序找出1000之內的所有完數,並按下面格式輸出其因子 一個數如果恰好等於它的因子之和,這個數就稱為"完數"。 例如,6的因子為1、2、3,而6=1+2+3,因此6是"完數"。 編程序找出N之內的所有完數, Python編程題3--找出1000以內的完全數 1150 求正整數2和n之間的完全數 一個數如果恰好等於它的因子之和,這個數就稱之為"完數"。6的因子為1,2,3,而6=1+2+3,因此6是“完數”.編程序找出1000之內的所有完數,並按照下面格式輸出其因子:6 its factors are 1 2 3 完全數指的是一個正整數等於它的所有真因子之和,比如6=1+2+3,編程打印出1000以內的所有完全數。(循環作業)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM