用 Python 编写程序,计算 n 的任何真因子为偶数完全平方数的概率
pythonserver side programmingprogramming更新于 2026/2/1 23:08:17
假设我们有一个数 n,我们必须计算 n 的任何真因子为偶数完全平方数的概率。
因此,如果输入为 n = 36,则输出为 1/8,因为 36 有八个真因子,分别是 {1,2,3,4,6,9,12,18},其中只有一个数(4)是完全平方数且为偶数。
要解决这个问题,我们将遵循以下步骤 −
- 如果 n mod 4 不等于 0,则
- 返回 0
- 否则,
- nc := n, ptr := 2
- l := a new list
- 当 ptr <= nc 的平方根时,执行
- a := 0
- 当 nc mod ptr 与 0 相同时,执行
- a := a + 1
- nc := floor of (nc / ptr)
- 如果 a > 0,则
- 将 a 附加到列表 l
- ptr := ptr + 1
- 如果 nc > 1,则将 1 附加到列表 l
- k := l[0]
- d := k + 1
- no := floor of (k / 2)
- 对于 l[从索引 1 到末尾] 中的每个 i,执行
- d := d *(i + 1)
- no := no * floor of (i / 2) + 1
- d := d - 1
- 如果 n 是完全平方数,则
- no := no - 1
- g := d 和 no 的 gcd
- d := d / g 的 floor
- no := no / g 的 floor
- 如果 no 与 0 相同,则
- 返回 0
- 否则,
- return a fraction no/d
示例
让我们看看下面的实现以便更好地理解 −
from math import gcd
def solve(n):
if n % 4 != 0:
return 0
else:
nc = n
ptr = 2
l = []
while ptr <= nc ** 0.5:
a = 0
while nc % ptr == 0:
a += 1
nc = nc / ptr
if a > 0:
l += [a]
ptr += 1
if nc > 1:
l += [1]
k = l[0]
d = k + 1
no = int(k / 2)
for i in l[1:]:
d = d * (i + 1)
no *= int(i / 2) + 1
d = d - 1
if int(n ** 0.5) ** 2 == n:
no -= 1
g = gcd(d, no)
d = d // g
no = no // g
if no == 0:
return 0
else:
return str(no) + '/' + str(d)
n = 36
print(solve(n))
输入
4, 27
输出
1/8
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

