找出所有三位數 n = 100a+10b+c,使得 n 等於其各位數字階乘之和:n = a! + b! + c!。a 為百位 (1~9),b、c 為十位、個位 (0~9)。三重迴窮舉所有組合,計算階乘和比對。著名解為 145 (1!+4!+5!=145)。
fact(m) 計算階乘 (0!=1)。a=1..9, b=0..9, c=0..9。sum = fact(a)+fact(b)+fact(c)。sum == 100*a+10*b+c 則輸出。#include <stdio.h>
int fact(int m);
int main() {
int a,b,c,n;
for(a=1;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++) {
n = fact(a)+fact(b)+fact(c);
if(n == 100*a+10*b+c)
printf("符合條件:%d (=%d!+%d!+%d!)\n", n, a,b,c);
}
return 0;
}
int fact(int m) {
int s=1;
for(int i=2;i<=m;i++) s*=i;
return s;
}
符合條件:145 (=1!+4!+5!) 符合條件:40585 (五位數,超出三位數範圍)
僅 145 為三位數解。此為因子翁數的特例。