源于Chatgpt:
import math
# 计算阶乘
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
# 判断素数
def is_prime(n):
if n < 2:
return False
else:
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
return False
return True
# 寻找符合条件的数
for n in range(800, 1201):
digits = [int(d) for d in str(n)]
factorial_sum = sum(factorial(d) for d in digits)
if is_prime(factorial_sum):
factors = '+'.join('{}!'.format(d) for d in digits)
print('{}:{}={}'.format(n, factors, factorial_sum))
----------------------------------------------------------------------
807:8!+0!+7!=45361
817:8!+1!+7!=45361
870:8!+7!+0!=45361
871:8!+7!+1!=45361
1002:1!+0!+0!+2!=5
1012:1!+0!+1!+2!=5
1020:1!+0!+2!+0!=5
1021:1!+0!+2!+1!=7
1032:1!+0!+3!+2!=29
1053:1!+0!+5!+3!=151
1065:1!+0!+6!+5!=719
1072:1!+0!+7!+2!=509
1112:1!+1!+1!+2!=5
1120:1!+1!+2!+0!=5
1121:1!+1!+2!+1!=7
1132:1!+1!+3!+2!=29
1153:1!+1!+5!+3!=151
1165:1!+1!+6!+5!=719
1172:1!+1!+7!+2!=509
1200:1!+2!+0!+0!=3
--------------------------------------------
其中,factorial()函数用于计算阶乘,is_prime()函数用于判断素数。在主函数中,我们使用了Python内置的range()函数来遍历800到1200之间的数,然后对每个数进行如下操作:
将该数的各位数字分离出来,并计算它们的阶乘和。
判断阶乘和是否为素数,如果是,就打印出符合条件的数的信息。
值得一提的是,题目中要求的各位数字的阶乘和并不是指整个数的阶乘,而是指该数每个数字的阶乘之和。因此,在代码中我们需要将每个数字提取出来,再分别计算它们的阶乘。
参考一下
#include <stdio.h>
// 判断素数
int is_prime(int n)
{
if (n <= 1) {
return 0;
}
for (int i = 2; i < n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
// 计算阶乘
int factorial(int n)
{
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
int main()
{
for (int i = 800; i <= 1200; i++) {
int n = i;
int sum = 0;
while (n > 0) {
int digit = n % 10;
sum += factorial(digit);
n /= 10;
}
if (is_prime(sum)) {
printf("%d:", i);
n = i;
while (n > 0) {
int digit = n % 10;
printf("%d!", digit);
n /= 10;
if (n > 0) {
printf("+");
}
}
printf("=%d\n", sum);
}
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: