找出800-1200之间所有符合以下条件的数:该数的各位数字的阶乘和为素数。按如下格式打印出所有符合条件的数:
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等等
程序中包含两个函数,分别用于实现判断素数和计算阶乘
代码:
def is_prime(n):
"""
判断一个数是否为素数
"""
if n <= 1:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def factorial(n):
"""
计算一个数的阶乘
"""
if n == 0:
return 1
else:
return n * factorial(n-1)
for i in range(800, 1201):
digits = [int(d) for d in str(i)]
factorial_sum = sum([factorial(d) for d in digits])
if is_prime(factorial_sum):
print(f"{i}:{'+'.join([f'{d}!={factorial(d)}' for d in digits])}={factorial_sum}")
#include <stdio.h>
int f(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * f(n-1);
}
}
int is_prime(int n) {
int i;
for (i = 2; i < n; i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int i, j, digit, sum, count = 0;
for (i = 800; i <= 1200; i++) {
sum = 0;
j = i;
while (j > 0) {
digit = j % 10;
sum += f(digit);
j /= 10;
}
if (is_prime(sum)) {
printf("%d: ", i);
j = i;
while (j > 0) {
digit = j % 10;
printf("%d ", digit);
j /= 10;
}
printf("%d\n", sum);
count++;
}
}
printf("一共 %d\n", count);
return 0;
}
首先定义了两个函数,is_prime 用于判断一个数是否为素数,factorial_sum 用于计算一个数的各位数字的阶乘和。
然后使用一个循环来遍历800到1200之间的所有数字,计算各位数字的阶乘和,并判断该和是否为素数,如果是则打印出符合条件的数字和各位数字的阶乘和。具体代码如下:
import math
def is_prime(n):
"""判断是否为素数"""
if n < 2:
return False
for i in range(2, int(math.sqrt(n))+1):
if n % i == 0:
return False
return True
def factorial_sum(n):
"""计算各位数字的阶乘和"""
return sum(math.factorial(int(d)) for d in str(n))
for n in range(800, 1201):
f_sum = factorial_sum(n)
if is_prime(f_sum):
print(f"{n}:{'+'.join(f'{d}!' for d in str(n))}={f_sum}")
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
##判断数字是否为素数
from math import sqrt,factorial
def isPrime(n):
if n <= 1:
return False
for i in range(2, int(sqrt(n)) + 1):
if n % i == 0:
return False
return True
##计算阶乘的值
def caculate(n):
result = 0
for i in str(n):
result += factorial( int(i) )
return result
for i in range(800,1201):
result = caculate(i)
if isPrime(result):
t = [ '{}!'.format(z) for z in str(i) ]
print(f"{ i }:{ '+'.join(t) }={ result }")