📜  链表中素数的阶乘总和(1)

📅  最后修改于: 2023-12-03 14:58:14.134000             🧑  作者: Mango

链表中素数的阶乘总和

在单向链表中,找出所有素数节点的值,并将它们的阶乘相加。以下是一个实现该功能的程序片段。

class Node:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True
    
def factorial(num):
    if num == 0:
        return 1
    else:
        return num * factorial(num-1)

def sum_of_factorials(head):
    sum = 0
    curr = head
    while curr:
        if is_prime(curr.val):
            sum += factorial(curr.val)
        curr = curr.next
    return sum

该程序首先定义了一个 Node 类用于表示单向链表中的节点,每个节点包含一个整数值 val 和一个指向下一节点的指针 next

接下来是两个辅助函数 is_primefactorial,它们分别用于判断一个整数是否为素数和计算一个整数的阶乘。

最后是主函数 sum_of_factorials,它接受一个链表头节点 head,遍历整个链表并对每个素数节点的值求阶乘,最后返回所有阶乘的总和。

该程序的时间复杂度为 $O(n\sqrt{n}\log n)$,其中 $n$ 是链表的长度,这是由于遍历链表需要 $O(n)$ 的时间,每个素数节点需要计算阶乘,而计算一个整数的阶乘需要 $O(\log n)$ 的时间。同时,判断素数的时间复杂度为 $O(\sqrt{n})$。