"""练习 15:判断正整数是否为质数;若不是,列出所有不同的质因数。 学习说明: - 质数是大于 1 且只有 1 和自身两个正因数的整数;1 不是质数也不是合数。 - 若 n 有一个大于 sqrt(n) 的因数,必有一个对应的小于 sqrt(n) 的因数,故只需检查平方根以内。 - 找质因数时,每找到一个因数就反复除尽它,列表中因此只记录不同质因数。 - 最后若 remaining 大于 1,它本身就是一个尚未记录的质因数。 """ n = int(input()) if n < 1: raise ValueError("请输入正整数") is_prime = n >= 2 if n >= 2: divisor = 2 # divisor * divisor <= n 等价于 divisor 不超过 n 的平方根,避免调用浮点平方根。 while divisor * divisor <= n: if n % divisor == 0: is_prime = False break divisor += 1 print("prime:", "yes" if is_prime else "no") remaining = n prime_factors = [] divisor = 2 # 每个因数只加入一次,但需要除尽它的所有幂次。 while divisor * divisor <= remaining: if remaining % divisor == 0: prime_factors.append(divisor) while remaining % divisor == 0: remaining //= divisor divisor += 1 if remaining > 1: prime_factors.append(remaining) print("distinct prime factors:", *prime_factors if prime_factors else ["none"])