數學回味系列之19
阿新 • • 發佈:2019-02-05
發現一些比較有意思的數,大家一起來認識一下:
分別是 阿姆斯特朗數、完全數、自守數、迴文數 。
阿姆斯特朗數:
如果一個正整數等於其各個數字的立方和,則稱為 阿姆斯特朗數 (也稱自戀性數)。
比如 153 = 1^3 + 5^3 + 3^3 (1+125+27) 就是一個阿姆斯特朗數。
參考程式碼:
/* linolzhang 2006.10 阿姆斯特朗數 */ #include <stdio.h> #include <math.h> int main() { printf("請輸入上限:"); int N; scanf("%d",&N); for(int n=0; n<N; n++) { // 計算各位數的立方和Sum int Sum = 0; int k = n; while(k>0) { int bit = k % 10; Sum += bit*bit*bit; k /= 10; } if(Sum == n) // 滿足 阿姆斯特朗數條件 printf("%d ",Sum); } getchar(); return 0; }
完全數:
完全數(Perfect number),又稱完美數或完備數,是一些特殊的自然數。
它所有的真因子(即除了自身以外的約數)的和(即因子函式),恰好等於它本身。
定義:如果一個數恰好等於它的因子之和,則稱該數為“完全數”。
參考程式碼:
/* linolzhang 2006.10 完全數 */ #include <stdio.h> #include <math.h> int main() { printf("請輸入上限:"); int N; scanf("%d",&N); for(int n=1; n<=N; n++) { int Sum = 0; for(int i=1; i<n; i++) { if(n%i == 0) Sum += i; } if(Sum == n) printf("%d ",n); } getchar(); return 0; }
自守數:
自守數是 平方後尾數等於該數自身的自然數。
參考程式碼:
/* linolzhang 2006.10 自守數 */ #include <stdio.h> #include <math.h> int main() { printf("請輸入上限:"); int N; scanf("%d",&N); for(int n=1; n<=N; n++) { int i = 1; while(i <= n) i *= 10; if(n*n % i == n) printf("%d ", n); } getchar(); return 0; }
迴文數:
“迴文” 是指正讀反讀都能讀通的句子,中華文化的精髓之一哈。
海上連雲港雲連上海
霧鎖山頭山鎖霧
人過大佛寺,寺佛大過人
……
迴文數與之類似,任意自然數n,若將n的各位數字反向排列所得自然數n_r與n相等,則稱n為迴文數。
例如,1234554321 為迴文數。
參考程式碼:
/* linolzhang 2006.10
迴文數
*/
#include <stdio.h>
#include <math.h>
int main()
{
printf("請輸入上限:");
int N;
scanf("%d",&N);
for(int n=1; n<=N; n++)
{
int n_r = 0; // 倒序結果
int i = n;
while(i != 0)
{
n_r = n_r*10 + i%10;
i /= 10;
}
if(n_r==n) // 判斷倒序後的結果k 和原來輸入的數字n 是否相等,相等返回true
printf("%d \n", n);
}
getchar();
return 0;
}